2015-01-21 1 views
0

매우 기본적인 ECMAScript 질문이 있습니다.이 질문은 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in 또는 질문을 읽는 것에 대해 확실하지 않습니다.for ... in 문 - 임의 순서가 무엇을 의미합니까?

예를 들어 개체를 반복하고 싶습니다. 배열을 만들 수 있습니다. 내 질문보기 : How to load a csv file without knowing the number of columns beforehand

d3.js로 csv 파일을 읽으면 개체 배열을 얻습니다. 배열 배열을 만들고 싶습니다. 그래서 for (obj 키) 문을 사용합니다. 올바른 순서 (임의의 순서에 대한 하나의 해석)를 보장하기 위해 모든 객체에 대한 속성 검사를 수행해야합니까? 또는 속성이 동일한 순서로 선택 될 것이라고 가정 할 수 있습니까 (두 번째 해석 : 순서는 임의적이지만 안정적입니다). 많은 예들이 후자의 해석을 가정하는 것처럼 보인다. 누군가 명확히 할 수 있습니까?

+0

JavaScript 개체 속성이 특정 순서로 보장되는 것은 아닙니다. 그들은있을 수도 있지만 보증 할 수는 없습니다. 정렬 된 요소가 필요한 경우 선형 배열을 사용하십시오. – Blazemonger

답변

2

동일한 특성을 가진 개체의 반복에도 불구하고 for..in 문이 특정 순서로 개체 속성을 반복 처리하지 않아야합니다. 올바른 주문을 위해 취할 수있는 여러 가지 방법이 있습니다. 여기에 제가 정기적으로 사용하는 방법이 있습니다.

// this is the order I want the values in 
var order  = ['id', 'first', 'last']; 
var collection = [{ first: 'Jane', last: 'Doe', id: 1}, {last: 'Smith', id: 2, first: 'John'}]; 
var outputArray = []; 

collection.forEach(function(row){ 
    var tmpRow = []; 
    for(var attr in row){ 
    // get the target index of the current attribute 
    var index = order.indexOf(attr); 
    // insert into desired position 
    tmpRow[index] = row[attr]; 
    } 
    outputArray.push(tmpRow); 
}) 

console.log(outputArray) 

희망이 있습니다.

+0

대단하다. 내 생각을 확인해주는 훌륭한 예를 든다. 고마워, 나는 그 접근법을 사용할 것이다. – ee2Dev

+0

내 기쁨, 도와 줘서 기쁩니다 :) –

관련 문제