2017-02-20 16 views
1

Использования Array of array to object - javascript и Convert an array to an array of objects в качестве ориентира я попытался написать функцию, которая приводит к принимать этот массив списка массива:массива из массива в список объектов (без дополнительного массива) в выходной

var list = [['name', 'Sparky'], ['breed', 'lab'], ['age', 4]]; 

и преобразование он в этом:

{ 
    name : 'Sparky' 
    breed : 'lab', 
    age : 4 
} 

Однако, когда я запускаю код ниже:

var list = [ 
 
    ['name', 'Sparky'], 
 
    ['breed', 'lab'], 
 
    ['age', 4] 
 
]; 
 

 
function toObjects(data) { 
 
    var keys = data.shift(), 
 
    i = 0, 
 
    k = 0, 
 
    obj = null, 
 
    output = []; 
 

 
    for (i = 0; i < data.length; i++) { 
 
    obj = {}; 
 

 
    for (k = 0; k < keys.length; k++) { 
 
     obj[keys[k]] = data[i][k]; 
 
    } 
 

 
    output.push(obj); 
 
    } 
 

 
    return output; 
 
} 
 
var data = [ 
 
    ['name', 'Sparky'], 
 
    ['breed', 'lab'], 
 
    ['age', 4] 
 
]; 
 

 
console.log(toObjects(data))

я получаю это:

console.log(toObjects(data)); //=> 

[ { name: 'breed', Sparky: 'lab' },{ name: 'age', Sparky: 4 } ] 

но мне нужен выход, чтобы не иметь дополнительный массив [] и также будут перечислены один файл, как это:

 { 
      name : 'Sparky' 
      breed : 'lab', 
      age : 4 
     } 

Любой совет? Пожалуйста и спасибо!

+0

Затем определите 'output' как' {} 'и вместо' OBJ [..] [..] '' сделать вывод [..] [..] ' – Rajesh

+0

Не можете ли вы сделать list.reduce ((accu, curVal) => {accu [curVal [0]] = curVal [1]; return accu;}, {})' ? – Li357

ответ

2

Я хотел бы использовать Array.prototype.reduce для выполнения вашей трансформации, а также в качестве аргумента destructing. Посмотрите, код довольно просто :)

let list = [ 
 
    ['name', 'Sparky'], 
 
    ['breed', 'lab'], 
 
    ['age', 4] 
 
]; 
 

 
function toObjects(data) { 
 
    // reduce iterates through every element in the `data` array 
 
    // and accumulates it into the object 
 

 
    let initialValue = {}; 
 
    return data.reduce((obj, [key, value]) => { 
 
    obj[key] = value; 
 
    return obj; 
 
    }, initialValue); // this could be in-lined with `{}` 
 
} 
 

 
var data = [ 
 
    ['name', 'Sparky'], 
 
    ['breed', 'lab'], 
 
    ['age', 4] 
 
]; 
 

 
console.log(toObjects(list))

+1

@Rajesh Я просто хотел назвать его чем-то, чтобы показать, что происходит. Я переименую его снова –

+0

Спасибо @Rico, это то, что я искал !! – learninghowtocode

+0

Спасибо всем за вашу помощь !! Ценить это! – learninghowtocode

0

Вы можете использовать функцию карты для достижения этой цели

var list = [['name', 'Sparky'], ['breed', 'lab'], ['age', 4]]; 
 
var newObj = new Object(); 
 
list.forEach(function (arr) { 
 
    newObj[arr[0]] = arr[1]; 
 
}); 
 

 
console.log(newObj)

+0

Я не думаю, что OP ищет альтернативы. Объектом этого вопроса является получение вывода как объекта, а не массива. – Rajesh

+0

Downvote, потому что вы используете 'Array.map', не возвращая ничего и присваивая. Это просто трата 'Array.map'. Если вы просто хотите обработать массив, используйте 'Array.forEach' – Rajesh

+0

' newObj [arr [0]] = arr [1]; 'используется в' map'. – Mairaj

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

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