Итерировать по массиву и объединять два массива - PullRequest
0 голосов
/ 07 января 2010

У меня есть два массива объектов. Я хотел бы перебрать каждый из этих двух массивов и добавить свойство ("IsPriced"). Затем я хотел бы объединить два массива в один массив.

Как я могу сделать это в JavaScript (с MooTools все хорошо, но не с jQuery, пожалуйста)?

Я действительно не знаю, с чего начать.

Ответы [ 5 ]

4 голосов
/ 07 января 2010

Вы можете сначала объединить два массива, а затем выполнить итерацию только объединенного:

// 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 голос
/ 05 сентября 2010

Для объединения двух массивов a1 и a2 вы можете использовать

var combined = a1.concat(a2);

Создает новый массив, объединяющий a1 и a2. Если вы хотите добавить содержимое a2 к a1, вы можете использовать метод, описанный в этом сообщении StackOverflow :

a1.push.apply(a1, a2);

Чтобы добавить новое свойство к каждому новому элементу в простом JavaScript, лучше всего использовать этот подход:

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

Это позволяет избежать итерации по массиву вручную. Обратите внимание, что Array.filter() был введен в JavaScript 1.6.

1 голос
/ 07 января 2010

Вы можете использовать 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 ):

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);
    }
  };
}
0 голосов
/ 07 января 2010
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]);
}
0 голосов
/ 07 января 2010
for (key in myArray1)
  myArray1[key].isPrice = 123;
for (key in myArray2)
  myArray2[key].isPrice = 123;
result = myArray1.concat(myArray2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...