2016-12-29 4 views
-1
const lessons = [ 
    [ 'Chemistry', '9AM', 'Mr. Darnick' ], 
    [ 'Physics', '10:15AM', 'Mrs. Lithun'], 
    [ 'Math', '11:30AM', 'Mrs. Vitalis' ] 
]; 

let lessonsAsObject = {}; 

lessons.map(lesson => { 
    lessonsAsObject[lesson[subject]] = lesson[0]; 
}); 

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

Однако приведенный выше код возвращает

ссылочной ошибку, "субъект не определен".

+0

Что вы ожидаете 'subject' для обозначения? Вы нигде не указали его. –

ответ

0

Вы можете использовать array destructuring, чтобы получить параметры из массива, а затем создать объект для каждого из них, используя shorthand and computed property names.

Если вы хотите, чтобы конечный результат будет объектом, а не массив объектов, вы можете объединить их в один объект с помощью spread syntax и Object#assign:

Вы можете использовать объект, как ключ:

const lessons = [["Chemistry","9AM","Mr. Darnick"],["Physics","10:15AM","Mrs. Lithun"],["Math","11:30AM","Mrs. Vitalis"]]; 
 

 
const lessonsAsObject = Object.assign(...lessons.map(([subject, time, teacher])=> ({ 
 
    [subject]: { 
 
    time, 
 
    teacher 
 
    } 
 
}))); 
 

 
console.log(lessonsAsObject);

Или индекс в качестве ключа:

const lessons = [["Chemistry","9AM","Mr. Darnick"],["Physics","10:15AM","Mrs. Lithun"],["Math","11:30AM","Mrs. Vitalis"]]; 
 

 
const lessonsAsObject = Object.assign(...lessons.map(([subject, time, teacher], index)=> ({ 
 
    [index]: { 
 
    subject, 
 
    time, 
 
    teacher 
 
    } 
 
}))); 
 

 
console.log(lessonsAsObject);

Если вы хотите массив объектов:

const lessons = [["Chemistry","9AM","Mr. Darnick"],["Physics","10:15AM","Mrs. Lithun"],["Math","11:30AM","Mrs. Vitalis"]]; 
 

 
const lessonsAsObject = lessons.map(([subject, time, teacher])=> ({ subject, time, teacher })); 
 

 
console.log(lessonsAsObject);

0

Если то, что вы пытаетесь закончить с массивом объектов, где объекты назвали свойства вместо вашей позиции массива, то вы можете сделать это:

var lessonsList = lessons.map(function(lesson) { 
    return {subject: lesson[0], time: lesson[1], teacher: lesson[2]}; 
}); 

Это даст вам массив объектов, как это:

[{subject: "Chemistry", time: "9AM", teacher: "Mr. Darnick"}, 
{subject: "Physics", time: "10:15AM", teacher: "Mrs. Lithun"}, 
{subject: "Math", time: "11:30AM", teacher: "Mrs. Vitalis"}] 

Если вы ищете какой-то другой тип вывода, то пожалуйста, покажите пример того, что именно выход вы пытаетесь достичь.

Однако приведенный выше код возвращает ссылочную ошибку, «объект не соответствует ».

Это потому, что идентификатор subject не определен нигде. Если вы намеревались использовать его как статическое имя свойства, вы можете сделать lesson["subject"]. Если вы намеревались иметь subject переменную с каким-либо именем свойства в ней, вам необходимо определить и назначить эту переменную.

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