2015-01-21 2 views
0

У меня есть очень простой вопрос ECMAScript, который я не уверен в чтении документа https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in или вопросы.для ... в заявлении - что означает произвольный порядок

Я хочу перебрать объект, например. для построения массива. См. Также мой вопрос: How to load a csv file without knowing the number of columns beforehand

Если я прочитал csv-файл с d3.js, я получаю массив объектов. Я хочу построить массив массива из него, поэтому я использую оператор for (key in 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

Мое удовольствие, рад помочь :) –

Смежные вопросы