2017-01-10 2 views
3

Я пытаюсь преобразовать литерал объекта в массив массивов с помощью функции.Object to Array (массив массивов)

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

[ ["ugh","grr"] , ["foo", "bar"] , ["blah" , 138] ] из obj1

[ "shambala","walawala"] , ["foofighter","Barstool"] , ["blahblah",1382342453] ] из obj2

var obj1 = { 
    ugh: "grr", 
    foo: "Bar", 
    blah: 138 
}; 

var obj2 = { 
    shambala: "walawala", 
    foofighter: "Barstool", 
    blahblah: 1382342453 
}; 

var piece1 = Object.keys(obj1); 

var piece2 = Object.values(obj1); 

var result = [ ]; 

for (var i = 0; i < piece1.length; i++) { 
result.push([piece1[i] , piece2[i]]) 
} 

console.log(result) 

Из того, что я выше, Мне удалось достичь:

[ ["ugh","grr"] , ["foo", "bar"] , ["blah" , 138] ] от obj1

Но я не понимаю, как достичь такого же результата с помощью функции.

Это похоже на простую вещь.

function objToArray(objectLiteral) { 

var piece1 = Object.keys(objectLiteral); 

var piece2 = Object.values(objectLiteral); 

var result = [ ]; 

for (var i = 0; i < piece1.length; i++) { 
return result.push([piece1[i] , piece2[i]]) 
    } 
} 

console.log(objToArray(obj1)) 

Это лучшее, что я могу сделать, но я продолжаю получать 1, и я не знаю, почему. Другие попытки Я просто закончил с неопределенным.

+0

[ 'Массив # push'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push) возвращает новый длина массива после того, как вы нажали на него элемент. – 4castle

ответ

1

Если она поддерживается в вашей среде, вы можете использовать Object.entries:

var obj1 = { 
    ugh: "grr", 
    foo: "Bar", 
    blah: 138 
}; 

var pairs = Object.entries(obj1); 

В качестве альтернативы, вы можете написать entries функцию:

function entries(object) { 
    const pairs = []; 
    for(let key in object) { 
    if(object.hasOwnProperty(key)) { 
     pairs.push([key, object[key]]); 
    } 
    } 
    return pairs; 
} 
3

Проблема с кодом является вы используя return раньше, чем это необходимо, см. этот рабочий код:

var obj1 = { 
 
    ugh: "grr", 
 
    foo: "Bar", 
 
    blah: 138 
 
}; 
 

 
var obj2 = { 
 
    shambala: "walawala", 
 
    foofighter: "Barstool", 
 
    blahblah: 1382342453 
 
}; 
 

 
function objToArray(objectLiteral) { 
 
    var piece1 = Object.keys(objectLiteral); 
 
    var piece2 = Object.values(objectLiteral); 
 
    var result = []; 
 
    for (var i = 0; i < piece1.length; i++) { 
 
    result.push([piece1[i], piece2[i]]) 
 
    } 
 
    return result; 
 
} 
 

 
console.log(objToArray(obj1));

+0

Спасибо всем, кто прокомментировал/прочитал/внес что-нибудь. Я очень ценю это. –

+0

Tha'er, вы ударили ноготь по голове. Это было неуместное возвращение. –

0

Вот как я его реализую.

function objectToArray(obj) { 
    return Object.keys(obj).map(function(prop) { 
     return [prop, obj[prop]]; 
    }); 
} 

// ES2015 
function objectToArray (obj) { 
    return Object.keys(obj).map(prop => [prop, obj[prop]]); 
} 

View demo