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條經驗 獲得超14個贊
您需要將過濾后的數據返回給創建的對象。您的 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條經驗 獲得超8個贊
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);
添加回答
舉報