迭代数组并组合两个数组

时间:2010-01-07 05:23:31

标签: javascript loops

我有两个对象数组。我想迭代这两个数组中的每一个并添加一个属性(“IsPriced”)。然后我想将两个数组合并为一个数组。

我怎样才能在JavaScript中实现这一点(MooTools很好,但请不要使用jQuery)?

我真的不知道从哪里开始。

5 个答案:

答案 0 :(得分:4)

您可以先组合两个数组,然后只迭代组合的数组:

// assuming that your arrays are called array1 and array2:
var combined = array1.concat(array2);

var n = combined.length;
while(n--) {
  combined[n].isPriced = true; // or maybe call a getIsPriced function 
}

我使用了反向循环,因为你只需要为所有元素添加一个属性,你并不真正关心迭代的顺序。

答案 1 :(得分:1)

您可以使用concat来组合数组,并使用each(来自MooTools)将函数应用于组合数组中的每个项目。

var first = [{a: "something"}, {b: "or other"}];
var second = [{d: "string"}, {e: "last object"}];

var combined = first.concat(second);
combined.each(function (item) {
  item.IsPriced = 10;
});

each由MooTools定义,所以如果您已经在使用MooTools,那么您也可以使用它。 ECMAScript现在提供了一个forEach方法,它可以执行相同的操作,但可能并非在所有浏览器上都可用。如果您更愿意使用标准方法,则以下定义​​应将其添加到尚未支持它的浏览器中(来自MDC文章,在MIT license下获得许可):

if (!Array.prototype.forEach)
{
  Array.prototype.forEach = function(fun /*, thisp*/)
  {
    var len = this.length >>> 0;
    if (typeof fun != "function")
      throw new TypeError();

    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this)
        fun.call(thisp, this[i], i, this);
    }
  };
}

答案 2 :(得分:1)

要合并两个数组a1a2,您可以使用

var combined = a1.concat(a2);

这会创建一个组合a1a2的新数组。 如果您要将a2的内容附加到a1,可以使用in this StackOverflow post所述的方法:

a1.push.apply(a1, a2);

要在普通JavaScript中为每个新元素添加新属性,最好使用以下方法:

combined.map(function(item){item.newProperty = "someValue";});

这可以避免手动迭代数组。但请注意,{1.6}中引入了Array.filter()

答案 3 :(得分:0)

var totalArr = new Array();


for (var i = 0; i < arr1.length; i++)
{
    arr1[i].isPriced = {};
    totalArr.push(arr1[i]);
}

for (var i = 0; i < arr2.length; i++)
{
    arr2[i].isPriced = {};
    totalArr.push(arr1[i]);
}

答案 4 :(得分:-1)

for (key in myArray1)
  myArray1[key].isPrice = 123;
for (key in myArray2)
  myArray2[key].isPrice = 123;
result = myArray1.concat(myArray2);