2016-10-21 6 views
0

Я пытаюсь присвоить name свойство obj[i][0] индексы sampleArr. Console.log(arr[i][0]) выходы "animals", "sopranos", "guitars" с каждой итерацией. Однако obj.name = arr [i] [0] присваивает obj.name = "guitars". Что объясняет это поведение и как я могу назначить эти несколько элементов одному свойству в цикле?присваивать несколько значений объекту property with for loop

var sampleArr = [ 
    ["animals", ["dogs", "cats", "pigs"]], 
    ["sopranos", ["Tony", "Carmella", "AJ", "Meadow"]], 
    ["guitars", ["Stratocaster", "Telecaster", "Gibson Flying-V"]] 
]; 


function objectifier(arr) { 
    var obj = {}; 
    for (var i = 0; i < arr.length; i++) { 
    console.log(arr[i][0]) 
    obj.name = arr[i][0] 
    } 
    return obj; 
} 
+0

Какова структура данных конечного результата, которую вы хотите? – plalx

+0

Попробуйте 'obj [" name "] = arr [i] [0]' – nurdyguy

+0

name: "animals", "sopranos", "guitars" –

ответ

0

Заменить

obj.name = arr[i][0] 

с

obj[i] = {}; 
obj[i]["name"] = arr[i][0]; 
+0

'' TypeError: Невозможно установить свойство 'name' из undefined.' Невозможно создать свойство name с помощью скобок нотации как 'obj.name =' does ... –

+0

Была ли эта ошибка с обновленным ответом? – Chris

+0

Да, он был заменен verbatim –

1

how could I assign these multiple elements to a single property within a loop?

Для достижения этой цели вы должны держать массив в этом одно свойство, например:

function objectifier(arr) { 
    var obj = {}; 
    obj.name = []; 
    for (var i = 0; i < arr.length; i++) { 
    console.log(arr[i][0]) 
    obj.name.push(arr[i][0]); 
    } 
    return obj; 
} 
+0

Конечная структура должна быть «name: «животные», «сопрано», «гитары» ' –

+0

Это соответствует указанным критериям, но я ищу эту конкретную структуру –