我试图将对象文字键值对更改为数组数组。
例如这个
var d = {
rhino: 'mozilla',
chrome: 8,
engine: 'v8'
}
function objToArray(obj) {
var arr = [];
for (var k in obj) {
arr.push(obj[k]);
}
return arr;
}
var result = objToArray(d);
console.log(result)

应该归还这个
[['rhino', 'mozilla'], ['chrome', 8], ['engine', 'v8']]
如何编写函数来执行此操作?优选没有循环。
答案 0 :(得分:1)
使用Object.keys
和Array#map
方法。
var d = {
rhino: 'mozilla',
chrome: 8,
engine: 'v8'
}
function objToArray(obj) {
var arr = [];
for (var k in obj) {
arr.push([k,obj[k]]);
}
return arr;
}
var result = objToArray(d);
console.log(result)
var obj = {
rhino: 'mozilla',
chrome: 8,
engine: 'v8'
};
var res = Object.keys(obj).map(function(k) {
return [k, obj[k]]
});
console.log(res);
var obj = {
rhino: 'mozilla',
chrome: 8,
engine: 'v8'
};
var res = Object.keys(obj).map(x=>[x, obj[x]]);
console.log(res);
仅供参考:由于对象属性没有任何顺序,因此可能会更改结果数组顺序。
答案 1 :(得分:1)
虽然对象的键没有顺序,但我建议使用数组保存顺序,并使用Array#map
映射值。
var object = { rhino: 'mozilla', chrome: 8, engine: 'v8' },
keys = ['rhino', 'chrome', 'engine'],
result = keys.map(function (key) {
return [key, object[key]];
});
console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }

ES6
var object = { rhino: 'mozilla', chrome: 8, engine: 'v8' },
keys = ['rhino', 'chrome', 'engine'],
result = keys.map(key => [key, object[key]]);
console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:0)
将_.zip
与lodash 4一起使用。
function objToArray(obj) {
if(!obj || typeof obj !== 'object') {
return false;
}
return _.zip(_.keys(obj), _.values(obj));
}
答案 3 :(得分:0)
你可以做这样的事情
检查此代码段
var obj = {
rhino: 'mozilla',
chrome: 8,
engine: 'v8'
}
var arr = Object.keys(obj).map(function(key) {
return [key, obj[key]];
});
console.log(arr);

希望有所帮助
答案 4 :(得分:0)
var d = {
rhino: 'mozilla',
chrome: 8,
engine: 'v8'
}
function objToArray(obj) {
var arr = [];
for (var k in obj) {
var ls = [k,obj[k]];
arr.push(ls);
}
return arr;
}
var result = objToArray(d);
console.log(result)