我想像这样转换一个对象:

{"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0}

输入一个键值对数组,如下所示:

[[1,5],[2,7],[3,0],[4,0]...].

如何将对象转换为JavaScript中的键值对数组?


当前回答

你可以使用Object.keys()和map()来做到这一点

var obj = {“1”:5,“2”:7,“3”:0,“4”:0,“5”:0,“6”:0,“7”:0,“8”:0,“9”:0,“10”:0,“11”:0,“12”:0} var result = Object.keys(obj).map((key) => [Number(key), obj[key]]); 控制台.log(结果);

其他回答

你可以使用3个方法将对象转换为数组(任何人都可以参考,不仅是这个问题(第三个是最合适的,回答这个问题) 种(),Object.values (), andObject.entries ()

3种方法的示例

使用种()

const text= {
    quote: 'hello world',
    author: 'unknown'
};
const propertyNames = Object.keys(text);

console.log(propertyNames);
result
[ 'quote', 'author' ]

使用Object.values ()

const propertyValues = Object.values(text);

console.log(propertyValues);

结果

[ 'Hello world', 'unknown' ]

使用Object.entires ()

const propertyValues = Object.entires(text);

console.log(propertyValues);

结果

[ [ 'quote', 'Hello world' ], [ 'author', 'unknown' ] ]

object. entries()返回一个数组,其元素对应于直接在object上找到的可枚举属性[key, value]对。属性的顺序与手动遍历对象的属性值所给出的顺序相同。 ——https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries描述

对象。Entries函数返回的输出几乎与您要求的完全相同,只是键是字符串而不是数字。

const obj = {“1”:5,“2”:7,“3”:0,“4”:0,“5”:0,“6”:0,“7”:0,“8”:0,“9”:0,“10”:0,“11”:0,“12”:0}; console.log(Object.entries(obj));

如果需要键为数字,则可以使用回调函数将结果映射到一个新数组,该回调函数将每对中的键替换为由它强制生成的数字。

const obj ={“2”,“1”:5:7,“3”:0,“4”:0,“5”:0,“6”:0,“7”:0,“8”:0,“9”:0,“10”:0,“11”:0,“12”:0}; const toNumericPairs = input => { const entries = Object.entries(input); 返回条目。map(entry =>对象。赋值(条目,{0:+条目[0]}); } console.log (toNumericPairs (obj));

我使用一个箭头函数和对象。在上面的例子中为map回调函数赋值,这样我就可以利用Object. assign这一事实将它保存在一条指令中。Assign返回被赋值的对象,单个指令箭头函数的返回值就是该指令的结果。

这相当于:

entry => {
    entry[0] = +entry[0];
    return entry;
}

正如@TravisClarke在评论中提到的,地图功能可以缩短为:

entry => [ +entry[0], entry[1] ]

但是,这将为每个键-值对创建一个新数组,而不是就地修改现有数组,从而使创建的键-值对数组的数量增加一倍。虽然原始条目数组仍然是可访问的,但它及其条目将不会被垃圾收集。

现在,尽管使用我们的in-place方法仍然使用两个数组来保存键-值对(输入数组和输出数组),但数组的总数只改变了一个。输入和输出数组实际上并不是由数组填充的,而是对数组的引用,而这些引用在内存中所占的空间可以忽略不计。

就地修改每个键-值对只会增加很少的内存,但是需要多输入几个字符。 为每个键-值对创建一个新数组会使所需的内存增加一倍,但需要输入的字符会减少一些。

你可以更进一步,通过就地修改entries数组而不是将其映射到一个新的数组来消除增长:

const obj ={“2”,“1”:5:7,“3”:0,“4”:0,“5”:0,“6”:0,“7”:0,“8”:0,“9”:0,“10”:0,“11”:0,“12”:0}; const toNumericPairs = input => { const entries = Object.entries(obj); 条目。forEach(entry => entry[0] = +entry[0]); 返回条目; } console.log (toNumericPairs (obj));

var obj = { "1": 5, "2": 7, "3": 0, "4": 0, "5": 0, "6": 0, "7": 0, "8": 0, "9": 0, "10": 0, "11": 0, "12": 0 }
let objectKeys = Object.keys(obj);

let answer = objectKeys.map(value => {
    return [value + ':' + obj[value]]
});

如果你正在使用lodash,它可以像这样简单:

var arr = _.values(obj);
const persons = { 
    john: { age: 23, year:2010},
    jack: { age: 22, year:2011},
    jenny: { age: 21, year:2012}
}
const resultArray = Object.keys(persons).map(index => {
    let person = persons[index];
    return person;
});

//use this for not indexed object to change array