JavaScript如何按索引筛选对象数组:保留tab1及指定索引对应数组
解决方案
方法一:直接构建新对象(推荐,简洁直观)
直接提取需要保留的tab1和目标tab属性,创建新对象返回,不会修改原数据:
function filterTabs(myArray, index) { // 校验索引范围,处理无效输入 if (index < 2 || index > 4) { return { tab1: myArray.tab1 }; } const targetTabKey = `tab${index}`; return { tab1: myArray.tab1, [targetTabKey]: myArray[targetTabKey] }; } // 使用示例 const originalObj = { tab1 : [], tab2 : [], tab3 : [], tab4 : [] }; const result = filterTabs(originalObj, 2); console.log(result); // 输出:{ tab1: [], tab2: [] }
方法二:拷贝后删除多余属性
先拷贝原对象,再遍历删除不需要的属性,适合需要保留原对象操作逻辑的场景:
function filterTabs(myArray, index) { if (index < 2 || index > 4) { return { tab1: myArray.tab1 }; } // 浅拷贝原对象,避免修改原数据 const filteredObj = {...myArray}; const keepKeys = ['tab1', `tab${index}`]; Object.keys(filteredObj).forEach(key => { if (!keepKeys.includes(key)) { delete filteredObj[key]; } }); return filteredObj; } // 使用示例 const originalObj = { tab1 : [], tab2 : [], tab3 : [], tab4 : [] }; const result = filterTabs(originalObj, 3); console.log(result); // 输出:{ tab1: [], tab3: [] }
方法三:解构赋值简化写法
利用ES6解构赋值快速提取需要的属性,语法更简洁:
function filterTabs(myArray, index) { if (index < 2 || index > 4) { return { tab1: myArray.tab1 }; } const targetTabKey = `tab${index}`; // 解构出需要的属性,忽略其余 const { tab1, [targetTabKey]: targetTab, ...rest } = myArray; return { tab1, [targetTabKey]: targetTab }; } // 使用示例 const originalObj = { tab1 : [], tab2 : [], tab3 : [], tab4 : [] }; const result = filterTabs(originalObj, 4); console.log(result); // 输出:{ tab1: [], tab4: [] }
内容的提问来源于stack exchange,提问作者Nabs335
相关产品推荐
相关产品推荐

