JavaScript 有以下陣列:
let foo = [
{ bar: '1', baz: 'a' },
{ bar: '2', baz: 'a' },
{ bar: '2', baz: 'a' },
{ bar: '3', baz: 'a' },
{ bar: '3', baz: 'b' },
{ bar: '4', baz: 'a' },
{ bar: '4', baz: null },
{ bar: '5', baz: 'a' },
{ bar: '5', baz: 'b' },
{ bar: '5', baz: null },
{ bar: '6', baz: null },
{ bar: '7', baz: null },
{ bar: '7', baz: null },
]
請問如何在 bar
值相同而且 baz
含有 null
與非 null
的項目之中,去除 baz
為 null
的項目?最後應得到以下陣列:
[
{ bar: '1', baz: 'a' },
{ bar: '2', baz: 'a' },
{ bar: '2', baz: 'a' },
{ bar: '3', baz: 'a' },
{ bar: '3', baz: 'b' },
{ bar: '4', baz: 'a' },
{ bar: '5', baz: 'a' },
{ bar: '5', baz: 'b' },
{ bar: '6', baz: null },
{ bar: '7', baz: null },
{ bar: '7', baz: null },
]
你可以使用js陣列的filter()去過濾,條件是遇到null的話,再用some()去找有沒有bar相同且baz不是null的存在
let result = foo.filter((item, index, array) => {
if (item.baz === null) {
let hasNonNullBaz = array.some(checkitem => checkitem.bar === item.bar && checkitem.baz != null);
return !hasNonNullBaz;
}
return true;
});
let result = foo.filter((item, index, array) => {
請問這一行的 index
與 array
是否為必要的?我試著把它們拿掉,改成以下程式碼,結果也是相同的。
let result = foo.filter((item) => {
if (item.baz === null) {
let hasNonNullBaz = foo.some(checkitem => checkitem.bar === item.bar && checkitem.baz != null)
return !hasNonNullBaz
}
return true
})
如果沒有 index
與 array
,是否會有什麼問題是我沒注意到的?