在现有数组的中间插入一个数组。保持现有参考完好无损

时间:2014-08-19 17:10:00

标签: javascript arrays

说我有两个数组:

var numbers = [1,3,5,7,9,11];
var letters = ['a','b','c'];

并说我有另一个数字数组的引用:

var anotherRef = numbers;

我想以修改现有数组的方式将一个插入到另一个中,以便在操作之后anotherRef === numbers

如果我不需要维护原始数组,我会这样做:

function insert(target, source, position) {
  return target.slice(0, position).concat(source, target.slice(position));
}

问题是,在使用此方法插入后,两个引用指向不同的数组:

numbers = insert(numbers, letters, 3);
numbers !== anotherRef; // sadly, true.

如果我要添加到数组的末尾,我可以这样做,这有点光滑:

function insertAtEnd(target, source) {
  Array.prototype.push.apply(target, source);
}

有没有一种很好的方法可以在JS数组中插入多个值?

2 个答案:

答案 0 :(得分:2)

您好像正在寻找splice方法:

function insert(target, source, position) {
    Array.prototype.splice.apply(target, [position, 0].concat(source));
    return target;
}
var numbers = [1,3,5,7,9,11];
var letters = ['a','b','c'];

insert(numbers, letters, 3);
console.log(numbers);
>> [1, 3, 5, "a", "b", "c", 7, 9, 11]

答案 1 :(得分:1)

工作示例:http://jsfiddle.net/0mwun0ou/1/

function insert(target, source, position) {
  Array.prototype.splice.apply(target, [position,0].concat(source));
}

var numbers = [1,3,5,7,9,11];
var letters = ['a','b','c'];

var anotherRef = numbers

insert(numbers, letters, 1)

console.log(anotherRef)

我从未接触anotherRef,但在该示例中输出为:

[1, "a", "b", "c", 3, 5, 7, 9, 11] 

有关如何使用数组作为拼接检查的第三个参数的说明:Is there a way to use Array.splice in javascript with the third parameter as an array?