嗨所以我有例如這個:
var array = [
[
"one",
null,
1
],
[
"one",
2,
null
],
[
"two",
null,
1
]
];
我想組合具有相同[0]值的陣列,例如在這個陣列中,前 2 個元素具有“一個”,我希望將這 2 個元素組合起來以洗掉空值。
最終的結果是:
var result= [
[
"one",
2,
1
],
[
"two",
null,
1
]
];
回答反饋:
- 陣列項長度的數量是相同的,但可以增加。
- 總會有一個 null vs 'a number'
- 陣列的第一項始終是一個值(所有時間戳或在此示例中我使用了一個字串)
謝謝
uj5u.com熱心網友回復:
function groupAndCollectListByFirstItem(index, list) {
(index[list[0]] ??= []).push(Array.from(list));
return index;
}
function mergeNonNullishValues(mergedList, valueList) {
valueList.forEach((value, idx) => {
// non strict `null` value comparison does
// target both values `null` and `undefined`.
if (value != null) {
mergedList[idx] = value;
}
});
return mergedList;
}
function createMergedValueList(listOfValueLists) {
return listOfValueLists.reduce(mergeNonNullishValues);
}
var sampleData = [
[ 'four', null, 1, 8, null ],
[ 'two', null, 1 ],
[ 'one', 2, null ],
[ 'four', 2, null, null, null ],
[ 'three', 4, 5 ],
[ 'four', null, null, null, 7 ],
[ 'one', null, 1 ],
];
console.log(
'intermediate grouped array of arrays...',
Object
.values(
sampleData
.reduce(groupAndCollectListByFirstItem, {})
)
);
console.log(
'end result ...',
Object
.values(
sampleData
.reduce(groupAndCollectListByFirstItem, {})
)
.map(createMergedValueList)
);
console.log('sample data ...', sampleData)
.as-console-wrapper { min-height: 100%!important; top: 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/420861.html
標籤:
