如何提取嵌套对象数组中的dateOfBirth字段生成一维数字数组
解决方案
你当前的代码只做了一层属性提取,没有处理dateOfBirth为嵌套数组的场景,也没有对返回的嵌套结构做拍平,用以下方案均可实现需求:
方案1:flatMap+递归(支持任意深度嵌套,现代JS环境推荐)
// 递归提取dateOfBirth字段值 const extractDateOfBirth = (item) => { const value = item.dateOfBirth; return Array.isArray(value) ? value.map(extractDateOfBirth) : value; } // flatMap会自动把map返回的嵌套数组拍平1层,配合递归即可得到一维数组 const finalArray = someJsonArray.flatMap(extractDateOfBirth); console.log(finalArray); // 输出 [25, 27, 35]
方案2:递归遍历收集(兼容所有JS环境,不受版本限制)
function getAllDateOfBirth(sourceArr, result = []) { for (let i = 0; i < sourceArr.length; i++) { const currentVal = sourceArr[i].dateOfBirth; if (Array.isArray(currentVal)) { // 嵌套数组时递归调用收集值 getAllDateOfBirth(currentVal, result); } else { // 数字类型直接存入结果数组 result.push(currentVal); } } return result; } const finalArray = getAllDateOfBirth(someJsonArray); console.log(finalArray); // 输出 [25, 27, 35]
如果你的场景下嵌套深度固定最多只有1层,也可以不用递归,直接判断类型处理:
const finalArray = someJsonArray.reduce((res, item) => { const val = item.dateOfBirth; if (Array.isArray(val)) { val.forEach(sub => res.push(sub.dateOfBirth)); } else { res.push(val); } return res; }, []);
内容的提问来源于stack exchange,提问作者user16352891
相关产品推荐
相关产品推荐

