我有两个对象数组。我想迭代这两个数组中的每一个并添加一个属性(“IsPriced”)。然后我想将两个数组合并为一个数组。
我怎样才能在JavaScript中实现这一点(MooTools很好,但请不要使用jQuery)?
我真的不知道从哪里开始。
答案 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)
要合并两个数组a1
和a2
,您可以使用
var combined = a1.concat(a2);
这会创建一个组合a1
和a2
的新数组。
如果您要将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);