2016-07-07 1 views
2

Я попробовал несколько функций карты, но не смог найти правильный способ получить то, что хочу. Вот так:Преобразование массива объектов и их свойств в массив

Object {Results:Array[3]} 
    Results:Array[3] 
     [0-2] 
      0:Object 
        id=null  
        name: "Rick" 
        upper:"0.67" 
      1:Object 
        id="00379321"  
        name:null 
        upper:"0.46" 
      2:Object 
        id="00323113"  
        name:null 
        upper:null 

Я хочу, чтобы мой конечный результат выглядел так. Я хотел, чтобы все нулевые значения были удалены, и все записи, связанные таким образом в объекте.

var finalResult = ["Rick","0.67","00379321","0.46","00323113"]; 

Как достичь этого результата?

ответ

2

Я предлагаю использовать фиксированный массив для ключей, поскольку свойства объекта не имеют порядка и порядок имеет значение.

var data = [{ id: null, name: "Rick", upper: "0.67" }, { id: "00379321", name: null, upper: "0.46" }, { id: "00323113", name: null, upper: null }], 
 
    result = []; 
 

 
data.forEach(function (a) { 
 
    ['id', 'name', 'upper'].forEach(function (k) { 
 
     if (a[k] !== null) { 
 
      result.push(a[k]); 
 
     } 
 
    }); 
 
}); 
 

 
console.log(result);

+0

, он дает мне сообщение об ошибке data.forEach не является функцией – Patrick

+0

, какой пользовательский агент вы используете? –

+0

не дал вам пользовательский агент – Patrick

3
_.chain(a) 
.map(function(x) {return _.values(x)}) 
.flatten() 
.filter(function(x) {return x != null;}) 
.value() 
+0

@ andrey- i получить синтаксическую ошибку, когда я использую это – Patrick

+0

Обратите внимание, что значения «null» в примере кода на самом деле не являются «null», а скорее строкой. Кроме того, обычно лучше дать объяснение кода, особенно тем, кто не знаком с библиотекой. –

+0

@Patrick обновлен – Andrey

3

Небольшая модификация для кода @ Андрея (требуется lodash.js)

var a = [{id:null, name: "Rick", upper:"0.67"}, {id:"00379321", name:null, upper:"0.46"}, {id: "00323113",name:null, upper:null}] 
_(a) 
.map(function(x) {return _.values(x)}) 
.flatten() 
.without(null) 
.value() 
+0

мои извинения. Вход в консоль немного отличается от того, что я упоминал ранее. Не могли бы вы взглянуть и сообщить мне – Patrick

+0

Я обновил свой ответ. Я использовал разные данные в массиве. Теперь он содержит одни и те же данные, и результат тот же –

1

Другого подчеркивание решения, сходный с другими решениями подчеркивания, но использует reject и isNull предиката :

var result = _.chain(data) 
    .map(_.values) 
    .flatten() 
    .reject(_.isNull) 
    .value(); 

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

  • Нет связанных вопросов^_^