为什么不使用Javascript进行数组连接?

时间:2016-03-03 17:35:21

标签: javascript arrays

当我在javascript中创建两个数组并尝试使用' concat'来连接它们时关键字,结果数组总是空的(好吧,不插入应该插入的数组中的东西)。我无法想象这实际上是js应该如何工作,因为那时......如果它什么都不做,那将是concat关键字的重点。哈哈。

那么我必须做错事,但我完全按照文档进行操作。

这是一个演示我的问题的小提琴:https://jsfiddle.net/webwhizjim/7z4v33of/

// Example with objects- doesn't work...
var greetings = [{"affirmative":"yeah"}];
var exclamations = [{"omg":"Oh my golly-gee-wilickers!"},{"wowz":"wowzers!"}];

var obArray = [];

obArray.concat(greetings);
console.log("The jumble array is: " + obArray);

// Example with strings- still doesn't work...

var greetings2 = ["affirmative","yeah"];
var exclamations2 = ["omg"];

var obArray2 = ["huh?"];

[].concat.call(obArray2, greetings2);
console.log("The jumble array is: " + obArray2);

要清楚地说明它不起作用"我的意思是控制台输出是这样的:

enter image description here

PS。在我的真实项目中,我使用的是角度1.4,所以如果有一种方法可以将数组连接起来,我可以使用它。

3 个答案:

答案 0 :(得分:2)

.concat()创建一个新数组并返回它。它不会将元素添加到现有数组中。

来自MDN

  

concat创建一个由对象中的元素组成的新数组   它被称之为,每个参数的顺序依次为   该参数的元素(如果参数是数组)或者   参数本身(如果参数不是数组)。

     

concat不会改变此参数或作为参数提供的任何数组   但是返回一个包含相同副本的浅拷贝   元素与原始数组相结合。原始元素   数组被复制到新数组中,如下所示:

您可以使用.splice().push()将元素添加到现有数组中。



var greetings2 = ["affirmative","yeah"];
var obArray2 = ["huh?"];
obArray2.push.apply(obArray2, greetings2);

// display result in snippet
document.write(JSON.stringify(obArray2));




或者,只需使用.concat()中新返回的数组:



    var greetings2 = ["affirmative","yeah"];
    var obArray2 = ["huh?"];
    var newArray = obArray2.concat(greetings2);

    // display result in snippet
    document.write(JSON.stringify(newArray));




答案 1 :(得分:1)

就像其他人所说的那样,.concat会返回一个新数组,并且不会改变您正在使用的数组的原始状态。如果您希望通过.concat连接两个数组的值,则必须将其存储在变量中,或者只需将其连接到您需要的地方。

示例:

var greetings = [{"affirmative":"yeah"}];
var exclamations = [{"omg":"Oh my golly-gee-wilickers!"},{"wowz":"wowzers!"}];

var obArray = greetings.concat(exclamations);

console.log(obArray); // returns [obj, obj, obj]

这会给你相同的结果:

console.log(greetings.concat(exclamations));

最后一件事。像.concat这样的方法可以链接。

答案 2 :(得分:0)

尝试以下方法:

var greetings = [{"affirmative":"yeah"}];
var exclamations = [{"omg":"Oh my golly-gee-wilickers!"}, {"wowz":"wowzers!"}];

var obArray = Array.prototype.concat.apply([], greetings, exclamations);
console.log("The jumble array is: " + obArray);
//Console Output: The jumble array is: [object Object]

var greetings2 = ["affirmative","yeah"];
var exclamations2 = ["omg"];

var obArray2 = [].concat(greetings2, exclamations2);
console.log("The jumble array is: " + obArray2);
//Console Output: The jumble array is: affirmative,yeah,omg