use*_*203 0 javascript arrays mapping
我有一个包含对象数组的数组.这是一个例子:
[ [{name: Alex, number: 2}, {name: Bill, number: 3}], [{name: John, number: 5}, {name: Aston, number: 7}]]
Run Code Online (Sandbox Code Playgroud)
我想创建另一个数组,其中包含上述数组数组的所有对象,如下所示:
[{name: Alex, number: 2}, {name: Bill, number: 3}, {name: John, number: 5}, {name: Aston, number: 7}]
Run Code Online (Sandbox Code Playgroud)
我写了下面的代码:
const productsInfoArray = [];
const productsRecords = customerContacts.map(i => i.products).map(product => {
product.map(i => productsInfoArray.push(i));
return productsInfoArray;
});
Run Code Online (Sandbox Code Playgroud)
但是当我console.log(productsRecords)返回一个包含所有信息的数组数组时.问题是此数组包含所需数组的12倍,因为customerContacts长度为12
您可以通过扩展到Array.concat()以下内容来展平数组:
const data = [ [{name: 'Alex', number: 2}, {name: 'Bill', number: 3}], [{name: 'John', number: 5}, {name: 'Aston', number: 7}]]
const productsRecords = [].concat(...data)
console.log(productsRecords)Run Code Online (Sandbox Code Playgroud)
或者通过使用Array.reduce()和连接非常大的数组,因为传播不是堆栈安全的:
const data = [ [{name: 'Alex', number: 2}, {name: 'Bill', number: 3}], [{name: 'John', number: 5}, {name: 'Aston', number: 7}]]
const productsRecords = data.reduce((r, a) => r.concat(a), [])
console.log(productsRecords)Run Code Online (Sandbox Code Playgroud)