我有两个数组,它们总是包含相同数量的元素。
var array1 = [["John","Barry","Anne"],["Greg"],["Tom"],["Roy","Rye"]]
var array2 = ["Banana","Orange","Apple","Grape","Pineapple","Raspberry","Pear"]
我希望array2
具有与array1
相同的数组结构,因此它应该看起来像:
var newArray = [["Banana","Orange","Apple"],["Grape"],["Pineapple"],["Raspberry","Pear"]]
我尝试使用array1
的length
首先创建正确的length
的new array
,然后循环array
以创建正确的length
的nested arrays
。然后使用for loop
,将array2's element
推到这个new array
,但我很难弄清楚如何做到这一点。
var array = new Array(array1.length)
var arrayLength = array1.map(x => x.length)
for (var i = 0; i < array.length; i++) {
array[i] = new Array(arrayLength[i]);
}
for (var k = 0; k < array.length; k++) {
for (var j = 0; j < array[k].length; j++) {
array[0][k].push(array2[j])
}
}
谢谢你的帮助!
您可以使用.map()
和.splice()
来获得预期的结果。
如果array2
不允许更改,我们需要它的副本->.slice()
const array1 = [["John", "Barry", "Anne"], ["Greg"], ["Tom"], ["Roy", "Rye"]];
const array2 = ["Banana", "Orange", "Apple", "Grape", "Pineapple", "Raspberry","Pear"];
// if array2 can be modified, then this is not necessary
// and you have to replace <clone> with <array2> in the block below
const clone = array2.slice();
const newArray = array1.map(inner => {
return clone.splice(0, inner.length);
});
console.log(newArray);
第一个问题的答案
你只需要.map()
(两次)和一点数学运算。
const array1 = [
[1, 2, 3],
[4],
[5],
[6, 7]
];
const array2 = ["Banana", "Orange", "Apple", "Grape", "Pineapple", "Raspberry", "Pear"];
const newArray = array1.map(inner => {
return inner.map(n => {
return array2[n - 1];
})
});
console.log(newArray);
(可以写成一行代码,但为了更容易阅读,我使用了显式的return
)
const array1 = [["John", "Barry", "Anne"], ["Greg"], ["Tom"], ["Roy", "Rye"]];
const array2 = ["Banana", "Orange", "Apple", "Grape", "Pineapple", "Raspberry","Pear"];
let indexTracker=0;
const newArr = array1.map(nameArr => nameArr.map(_ => array2[indexTracker++]));
console.log(newArr);
使用Array.map()
和Array.slice()
来获得最终结果
const array1 = [[1, 2, 3], [4], [5], [6, 7]]
const array2 = ["Banana", "Orange", "Apple", "Grape", "Pineapple", "Raspberry", "Pear"]
let index = 0;
const finalArray = array1.map((itemList) => {
const list = array2.slice(index, index + itemList.length);
index += itemList.length;
return list;
});
console.log(finalArray);