3 回答
TA贡献1877条经验 获得超6个赞
filter 不会改变原始数组,它只是返回过滤后的数组
let tabs = {
'tab1': [{id: '1', mnemonic: 'first', value: 'jim', flag: false},
{id: '2', mnemonic: 'second', value: 'kim', flag: true}],
'tab2': [{id: '1', mnemonic: 'first', value: 'jim', flag: true},
{id: '2', mnemonic: 'second', value: 'kim', flag: false}]
}
let expectedOutput = {
'tab1': [,
{id: '2', mnemonic: 'second', value: 'kim', flag: true}],
'tab2': [{id: '1', mnemonic: 'first', value: 'newValue', flag: true},
]
}
let newTabs = Object.fromEntries(
Object.entries(tabs).map(([tab, data]) => {
data = data.map(d => ({...d}));
// filter doesnt change the original array, it just return filtered array
data = data.filter(d => d.flag === true)
return [tab, data];
})
);
console.log("original", tabs);
console.log("new", newTabs);
TA贡献2065条经验 获得超13个赞
您需要将过滤后的数据返回给创建的对象。您的 current.filter创建了一个未在任何地方使用的新过滤数组;旧数组不会发生变异。
let tabs = {'tab1': [{id:'1',mnemonic:'first',value:'jim',flag:false},
{id:'2',mnemonic:'second',value:'kim',flag:true}],
'tab2':[{id:'1',mnemonic:'first',value:'jim',flag: true},
{id:'2',mnemonic:'second',value:'kim',flag: false}]}
let expectedOutput = {'tab1': [,
{id:'2',mnemonic:'second',value:'kim',flag:true}],
'tab2':[{id:'1',mnemonic:'first',value:'newValue',flag:true},
]}
let newTabs = Object.fromEntries(
Object.entries(tabs).map(([tab,data]) => [
tab,
data.filter(({ flag }) => flag)
])
);
console.log("new",newTabs);
TA贡献1725条经验 获得超7个赞
let tabs = {'tab1': [{id:'1',mnemonic:'first',value:'jim',flag:false},
{id:'2',mnemonic:'second',value:'kim',flag:true}],
'tab2':[{id:'1',mnemonic:'first',value:'jim',flag: true},
{id:'2',mnemonic:'second',value:'kim',flag: false}]}
let expectedOutput = {'tab1': [,
{id:'2',mnemonic:'second',value:'kim',flag:true}],
'tab2':[{id:'1',mnemonic:'first',value:'newValue',flag:true},
]}
let newTabs = {};
Object.entries(tabs).map((item) => {
newTabs[item[0]] = item[1].filter(({ flag}) => flag === true);
});
console.log("original",tabs);
console.log("new",newTabs);
添加回答
举报