Преобразование массива массивов в объект?

1

Пытается преобразовать массив массивов (где внутренние массивы содержат только два значения) в объект.

Это то, что у меня есть до сих пор:

function fromListToObject(array) {
  var obj = {};
  for (i in array) {
      obj[array[i[0]]] = array[i[1]];
  };
  return obj
};


A1=[['make', 'Ford'], ['model', 'Mustang'], ['year', 1964]];
console.log(fromListToObject(A1));

Но это дает мне объект, где ключи являются парами массива, а значения "неопределены".

Halp?

  • 0
    Не ответ, а просто примечание: вы не должны использовать циклы for...in для перебора массива, они предназначены для объектов. Используйте нормальный для цикла. for (i = 0; i < array.length; i++) - веб-документы MDN на эту тему.
Теги:

4 ответа

2

С ES6 вы можете использовать

var array = [['make', 'Ford'], ['model', 'Mustang'], ['year', 1964]],
    object = Object.assign(...array.map(([k, v]) => ({ [k]: v })));

console.log(object);
  • 0
    очень подробно, и я люблю умное использование деструктурирования в примере!
1

Вы можете использовать Array.prototype.reduce() следующим образом:

const array = [['make', 'Ford'], ['model', 'Mustang'], ['year', 1964]];

const object = array.reduce((result, [key, value]) => {
  result[key] = value;
  
  return result;
}, {});

console.log(object);
  • 0
    Я считаю, что предоставление совершенно нового метода для ОП - это не правильно. Вы можете ясно видеть, что OP - новичок по коду. Приятно предложить хорошее и новейшее решение, но более важно сказать, где ОП сделал ошибку. И это то, что отделяет новых и опытных пользователей SO, которые хотят помогать другим. Многие люди вслепую приветствуют ответы пользователей с высокой репутацией, не задумываясь. Так что будь более ответственным. Все это только мое мнение и может быть ошибочным
  • 0
    @SkrewEverything Насколько я понимаю, SO стремится служить хранилищем вопросов и ответов, которые приносят пользу не только пользователю, который изначально задал вопрос, но также и всем будущим посетителям, которые могут столкнуться с той же проблемой. Поскольку кто-то уже предоставил ответ, который указывает на конкретную ошибку ОП, я не понимаю, как мой ответ можно считать «безответственным».
Показать ещё 2 комментария
1

Измените свой код на:

function fromListToObject(array) {
  var obj = {};
  for (i in array) {
      obj[array[i][0]] = array[i][1];
  };
  return obj
};


A1=[['make', 'Ford'], ['model', 'Mustang'], ['year', 1964]];
console.log(fromListToObject(A1));

При получении значения массива вы написали неправильный синтаксис.

0

Попробуй это:

function fromListToObject(array) {
  return Object.assign.apply({}, array.map(function(subarray) {
      var temp = {}
      temp[subarray[0]] = subarray[1]
      return temp
    })
  )
};


A1=[['make', 'Ford'], ['model', 'Mustang'], ['year', 1964]];
console.log(fromListToObject(A1));

Он сглаживает все массивы в один большой объект с помощью этих пар ключ-значение:

{ make: 'Ford', model: 'Mustang', year: 1964 }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню