用连续的数字填充数组
Fill an array with consecutive numbers
我有一个如下所示的数组:[[3, Apple], [4, Banana], [7, Orange], [9, Pear]]
现在,我想将所有缺失的数字从 1 到 10 添加到示例中有水果的空条目中,结果我将得到:
[
[1, ],
[2, ],
[3, Apple],
[4, Banana],
[5, ],
[6, ],
[7, Orange],
[8, ],
[9, Pear]
[10, ]
]
我会分享到目前为止我尝试过的方法,但我真的被困在一开始。有人知道如何实现吗?
您可以先创建一个仅包含索引的数组,然后遍历您的数据以填充输入中的缺失值。
const data = [[3, "Apple"], [4, "Banana"], [7, "Orange"], [9, "Pear"]]
const result = data.reduce((result, [id, val]) => {
result[id - 1].push(val);
return result;
}, Array.from({length: 10}, (_, i)=> [i + 1]))
console.log(result);
这里reduce函数的第二个参数是一个长度为10的数组,填充了1个元素数组,其中元素是一个索引+1。
第一个参数是对输入数据的每个元素调用的函数,它修改第二个参数。
let result = []
let fruits = [[3, 'Apple'], [4, 'Banana'], [7, 'Orange'], [9, 'Pear']]
let fruitsObject = Object.fromEntries(fruits)
for (let i = 1; i<=10; i++){
result.push(fruitsObject[i] ? [i, fruitsObject[i]] : [i])
}
console.log(result)
一种over-engineering方式。别对我这么苛刻。
const sourceArr = [[3, 'Apple'], [4, 'Banana'], [7, 'Orange'], [9, 'Pear']];
const sourceObj = Object.fromEntries(sourceArr);
const nullArr = [...Array(10).keys()].map(i => [i+1]);
const nullObj = Object.fromEntries(nullArr);
const unionObj = { ...nullObj, ...sourceObj };
const pairs = Object.entries(unionObj)
const result = pairs.map(pair => pair.filter(e => e));
console.log(result);
.as-console-wrapper{min-height: 100%!important; top: 0}
我有一个如下所示的数组:[[3, Apple], [4, Banana], [7, Orange], [9, Pear]]
现在,我想将所有缺失的数字从 1 到 10 添加到示例中有水果的空条目中,结果我将得到:
[
[1, ],
[2, ],
[3, Apple],
[4, Banana],
[5, ],
[6, ],
[7, Orange],
[8, ],
[9, Pear]
[10, ]
]
我会分享到目前为止我尝试过的方法,但我真的被困在一开始。有人知道如何实现吗?
您可以先创建一个仅包含索引的数组,然后遍历您的数据以填充输入中的缺失值。
const data = [[3, "Apple"], [4, "Banana"], [7, "Orange"], [9, "Pear"]]
const result = data.reduce((result, [id, val]) => {
result[id - 1].push(val);
return result;
}, Array.from({length: 10}, (_, i)=> [i + 1]))
console.log(result);
这里reduce函数的第二个参数是一个长度为10的数组,填充了1个元素数组,其中元素是一个索引+1。
第一个参数是对输入数据的每个元素调用的函数,它修改第二个参数。
let result = []
let fruits = [[3, 'Apple'], [4, 'Banana'], [7, 'Orange'], [9, 'Pear']]
let fruitsObject = Object.fromEntries(fruits)
for (let i = 1; i<=10; i++){
result.push(fruitsObject[i] ? [i, fruitsObject[i]] : [i])
}
console.log(result)
一种over-engineering方式。别对我这么苛刻。
const sourceArr = [[3, 'Apple'], [4, 'Banana'], [7, 'Orange'], [9, 'Pear']];
const sourceObj = Object.fromEntries(sourceArr);
const nullArr = [...Array(10).keys()].map(i => [i+1]);
const nullObj = Object.fromEntries(nullArr);
const unionObj = { ...nullObj, ...sourceObj };
const pairs = Object.entries(unionObj)
const result = pairs.map(pair => pair.filter(e => e));
console.log(result);
.as-console-wrapper{min-height: 100%!important; top: 0}