2010-01-07 9 views
0

두 개의 배열 객체가 있습니다. 이 두 배열을 반복하여 속성 ("IsPriced")을 추가하고 싶습니다. 그런 다음 두 배열을 하나의 배열로 결합하고 싶습니다.배열을 반복하고 두 배열을 결합하십시오.

JavaScript로 어떻게 할 수 있습니까? (MooTools는 괜찮지만 jQuery는 사용하지 마십시오)?

어디서부터 시작해야할지 모르겠습니다.

+0

"속성 추가"란 무엇을 의미합니까? 배열의 각 요소에 속성을 추가 하시겠습니까? –

+0

예. 요소는 객체입니다. 따라서 현재 객체가 'foobar'인 경우 foobar.IsPriced = ... – JamesBrownIsDead

+0

자바 스크립트에서 속성을 추가하는 코드는 ... 잘 ... 속성을 추가하십시오. 'foobar.IsPriced = yourValue'를 선언하면됩니다. – Jason

답변

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 
} 

내가 역 루프를 사용, 당신은 정말하지 않도록주의 반복의 순서에 대해서.

+2

+1 니스, 슈퍼 간결. 그것을 사랑해! –

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

for-in은 특정 객체의 모든 속성을 반복하는 데 사용됩니다. 배열의 경우 길이가 객체를 추가하지 않으므로 .length 속성이 포함됩니다. isPrice 속성이 허용되지 않습니다. for 반복 배열 요소는 사용하지 않아야합니다. – jerjer

+0

@jerjer : 맞습니다. 배열을 반복 할 때'for ... in' 문은 * 항상 * 사용하지 않아야합니다.'length'에 대해서 대부분의 구현에서이 프로퍼티는 열거 할 수 없으며 반복되지 않습니다 ('[] .propertyIsEnumerable ('length') == false'). 그러나이 코드가 갖는 또 다른 중요한 문제는' '변수가 전역 변수가됩니다 ('window.key'가 생성됩니다) ... – CMS

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]); 
} 
당신은 배열을 결합 concat을 사용할 수 있습니다
1

및 (Mootools의에서) each이 결합 된 배열의 각 항목에 함수를 적용합니다.

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 메서드를 제공합니다. 오히려 표준 방법을 사용하려는 경우, 다음과 같이 정의합니다 (MIT license에서 라이센스 MDC 기사에서) 이미를 지원하지 않는 브라우저에 추가해야합니다

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); 
    } 
    }; 
} 
1

두 개의 배열을 결합하려면 a1a2 당신이 a1a2을 결합한 새로운 배열을 생성

var combined = a1.concat(a2); 

사용할 수 있습니다. 당신은 당신이 방법은 in this StackOverflow post을 설명 사용할 수 있습니다 a1하는 a2의 내용을 추가하려면 :

:

a1.push.apply(a1, a2); 

이이 방법을 사용하는 것이 가장 좋습니다 일반 자바 스크립트의 각 새로운 요소에 새로운 속성을 추가하려면

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

이렇게하면 배열을 수동으로 반복하지 않아도됩니다. 그러나 Array.filter()이 JavaScript 1.6에 도입되었습니다.

관련 문제