Javascript 使用es6扩展到concat多个阵列
我们都知道你可以做到:Javascript 使用es6扩展到concat多个阵列,javascript,ecmascript-6,Javascript,Ecmascript 6,我们都知道你可以做到: let arr1 = [1,2,3]; let arr2 = [3,4,5]; let arr3 = [...arr1, ...arr2]; // [1,2,3,3,4,5] 但是如何使concat N数组具有动态性呢?仅使用扩展语法无法做到这一点,因为扩展语法要求您事先知道要连接多少个数组。但是,您可以编写以下函数: function concatN(...arguments) { let accumulator = []; for(let arg =
let arr1 = [1,2,3];
let arr2 = [3,4,5];
let arr3 = [...arr1, ...arr2]; // [1,2,3,3,4,5]
但是如何使concat N数组具有动态性呢?仅使用扩展语法无法做到这一点,因为扩展语法要求您事先知道要连接多少个数组。但是,您可以编写以下函数:
function concatN(...arguments) {
let accumulator = [];
for(let arg = 0; arg < arguments.length; arg = arg + 1) {
accumulator = [...accumulator, ...arguments[arg]];
}
return accumulator;
}
一个选项是使用
减少:
let arrs = [[1, 2], [3, 4], [5, 6]];
arrs.reduce((a, b) => [...a, ...b], []);
当然,这是一个缓慢的解决方案(二次时间)。或者,如果您可以使用Lodash,\uz.flatte
完全按照您的要求执行,并且执行效率更高(线性时间)
编辑
或者,根据Xotic750下面的评论改编
[].concat(...arrs);
这应该是有效的(线性时间)。另一个选项可以是:
const nArrays=[
[1, 2, 3, 4, 5],
[6, 7, 8, 9],
[10, 11]
];
常数展平=[].concat(…nArrays);
console.log(展平)
您可以使用for..of
循环中的扩展元素将数组值连接到单个数组
让arr1=[1,2,3];
设arr2=[3,4,5];
设arr3=[];
对于(让[arr1,arr2/*,arrN*/])arr3.push(…arr);
控制台日志(arr3)
您可以使用递归函数和Array.prototype.concat
const concatN=(x,…xs)=>
x==未定义?[]:x.concat(concatN(…xs))
console.log(concatN([1,2,3],[4,5,6],[7,8,9]))
//[1,2,3,4,5,6,7,8,9]
让水果=[“苹果”、“香蕉”、“梨”];
让蔬菜=[“玉米”、“土豆”、“胡萝卜”];
让我们生产=[…水果,…蔬菜];
控制台。日志(生成)代码>以下解决方案适用于我(ES6中的扩展运算符):
let array=['my','solution','works'];
设newArray=[];
设newArray2=[];
push(…数组)//添加到同一数组
newArray2.push([…数组])//添加为子/叶/子数组
log(newArray);
console.log(newArray2)代码>我们可以通过以下方式使用es6解决
function mergeTwo(arr1, arr2) {
let result = [...arr1, ...arr2];
return result.sort((a,b) => a-b);
}
让arr1=[1,2,3];
设arr2=[3,4,5];
设arrs=[arr1,arr2].flat();//[1,2,3,3,4,5]
控制台日志(arrs)代码>可以将动态数组存储在数组中…或将数组作为值的对象中。无法迭代未知数量的单个变量为什么必须使用扩展运算符?concat
方法仍然有效…Array.prototype.concat不是为您做的吗?哦,哦,所以ES5ifyFunction.prototype.call.bind(Array.prototype.concat)
:)如果你把数组放在一个数组中,你就可以了Array.prototype.concat.apply([],arr)
虽然这不再使用扩展运算符。@Xotic750不错,但您可以使用扩展运算符来完成!请参阅我的编辑。请注意,在typescript中,如果希望返回值为number[]
而不是any[]
(例如([]作为number[]),则需要强制键入空数组。concat(…arrs)
)此给定代码与给定问题完全相同。这不是为N个阵列制作Dynamicly concat解决方案的答案。从ES2019开始,您可以使用nArrays.flat()
function mergeTwo(arr1, arr2) {
let result = [...arr1, ...arr2];
return result.sort((a,b) => a-b);
}