我有两个像这样的数组,
var firstArray = ['one','two','three','four','five','six','seven'];
var secondArray =['1','2','3','4','5','6','7','8'];
我必须将第二个数组元素插入到第一个数组中,如下所示,
var combinedArray =['one','two','three','1','2','four','five','six','3','4','seven','5','6','7','8']
我知道我可以在specific index
处拼接并插入一个元素。但是我很困惑如何实现这种模式。
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
您可以为块使用模式,并为新数组切片所需的长度。
var firstArray = ['one', 'two', 'three', 'four', 'five', 'six', 'seven'],
secondArray = ['1', '2', '3', '4', '5', '6', '7', '8'],
data = [firstArray, secondArray],
pattern = [3, 2],
result = [],
i = 0,
l = data.reduce(function (r, a) { return Math.max(r, a.length); }, 0);
while (i < l) {
pattern.forEach(function (a, j) {
result = result.concat(data[j].slice(i * a, (i + 1) * a));
});
i++;
}
console.log(result);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 1 :(得分:0)
您实际上可以拼接多个项目:
firstArray.splice(3, 0, "1", "2");
答案 2 :(得分:0)
你可以创建两个变量i
和j
并逐渐增加3,你将用它来切割第一个数组并将第二个增加2,你将使用那个变量来切割第二个数组。如果i + 3 > a.length
您将b
数组中的其余元素连接到结果。
var a = ['one','two','three','four','five','six','seven'];
var b = ['1','2','3','4','5','6','7','8'];
var r = [], i = 0, j = 0
while(i < a.length) {
r.push(...a.slice(i, i + 3), ...b.slice(j, i + 3 < a.length ? j + 2 : b.length))
i += 3, j += 2
}
console.log(r)
答案 3 :(得分:0)
更细粒度的方法:
var firstArray = ['one','two','three','four','five','six','seven'];
var secondArray =['1','2','3','4','5','6','7','8'];
var combinedArray = flatten(zip(
toGroupsOf(3, firstArray),
toGroupsOf(2, secondArray)
));
console.log(combinedArray);
//a the utilities for that
function isUint(value){
return value === (value >>> 0)
}
function toGroupsOf(length, arrayOrString){
if( !isUint(length) || !length )
throw new Error("invalid length " + JSON.stringify(length));
return Array.from(
{ length: Math.ceil(arrayOrString.length / length) },
(v,i) => arrayOrString.slice(i*length, (i+1)*length)
);
}
function zip(...arraysOrStrings){
var numColumns = arraysOrStrings.length,
lengths = arraysOrStrings.map(item => (item && +item.length) || 0),
x=0, y=0;
return Array.from(
{ length: lengths.reduce((a,b)=>a+b, 0) },
function(v,i){
for(var safety = numColumns+1; safety--;){
if(y < lengths[x])
return arrays[x++][y];
else if(++x >= numColumns)
x=0, ++y;
}
throw new Error("something went wrong, this line should have never been reached");
}
)
}
function flatten(array){
return [].concat.apply([], array);
}
&#13;