如何在ES6中将键值对对象转换为值数组?

4

我是一个React应用程序的开发者,需要将一个键值对对象转换成如下格式:

{
  0: 'John',
  1: 'Tim',
  2: 'Matt'
};

将其转换为仅包含值的数组,如下所示:
['John', 'Tim', 'Matt']

我该如何完成这个任务?
const obj = {
  0: 'John',
  1: 'Tim',
  2: 'Matt'
};

const arr = /* ??? */;

3
可能是将JS对象转换为数组的重复问题。 - James Thorpe
这篇文章可能会帮助你找到答案。https://dev59.com/gmw15IYBdhLWcg3wD3dk#26166303 - Vikas
5个回答

11
你可以使用 Object.values 方法。

Object.values() 方法返回一个给定对象自己的所有可枚举属性值的数组,与通过 for...in 循环提供的顺序相同(区别在于 for-in 循环也会枚举原型链上的属性)。

var object = { 0: 'John', 1: 'Tim', 2: 'Matt' }, 
    array = Object.values(object);
    
console.log(array);

使用 ES6,你可以使用 Array.from 方法并为值使用回调函数。

var object = { 0: 'John', 1: 'Tim', 2: 'Matt' }, 
    array = Array.from(Object.keys(object), k => object[k]);
    
console.log(array);


1
Object.values 在 ES6 中不包含,它是在 ES7 中引入的。他想要一个在 ES6 中可用的替代方案。 - user6576367

7
您可以使用Object.values命令。
根据文档

Object.values()返回一个数组,其元素是在对象上找到的可枚举属性值。属性的顺序与手动循环对象的属性值所给出的顺序相同。

尽管这是一个ES2017解决方案,但由于您正在使用React,因此可以将stage-0作为babel的预设并访问此功能。

var data ={
  0: 'John',
  1: 'Tim',
  2: 'Matt'
};

var newdata = Object.values(data);
console.log(newdata);

除了像Object.keys这样的方法可以将所有键作为数组给出,Object.entries方法返回给定对象自己枚举属性[key, value]对的数组,这也可能对您有用。


很棒的解决方案,但它是ES2017的功能,不支持旧版浏览器。 - JSON Derulo
1
@D.Simon 你说得对,不过既然 OP 正在使用 React,他可以使用 stage-0 预设来使用它。 - Shubham Khatri
@D.Simon,const也是如此。至于对象方法,有填充程序! - Estus Flask

4
const obj = {
  0: 'John',
  1: 'Tim',
  2: 'Matt'
};

const arr = [];
for(let key in obj){
  arr.push(obj[key]);
}

0

如果您有数字键并且按顺序排列而且没有间隙,您可以使用Object.assign,将数组作为目标,给定的对象作为源。

var object = { 0: 'John', 1: 'Tim', 2: 'Matt' }, 
    array = Object.assign([], object);
    
console.log(array);


0

这是常用的一个:

const obj={
           1:'Azamat',
           2: 'Kanybek',
           3: 'Manas'}

console.log(Object.values(obj))

对于键值对:

const arr = [];

for(let key in obj){
  arr.push([key,obj[key]])
  
}
console.log(arr)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接