【问题标题】:How to convert key-value pair object into an array of values in ES6?如何将键值对对象转换为 ES6 中的值数组?
【发布时间】:2018-01-06 17:59:29
【问题描述】:

我正在开发一个 React 应用程序,我需要像这样转换一个键值对象:

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

到一个像这样的值的数组:

['John', 'Tim', 'Matt']

我该如何做到这一点?

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

const arr = /* ??? */;

【问题讨论】:

标签: javascript arrays object ecmascript-6 keyvaluepair


【解决方案1】:

你可以使用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);

【讨论】:

  • Object.values 不包含在 ES6 中,随 ES7 一起提供。他想要 ES6 中的东西。
【解决方案2】:

您可以使用Object.values 命令。

根据docs

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 功能,旧版浏览器不支持。
  • @D.Simon 你是对的,但是由于 OP 正在使用 react,他可以利用 stage-0 预设来使用它
  • @D.Simon 所以const。至于 Object 方法,还有 polyfills!
【解决方案3】:
const obj = {
  0: 'John',
  1: 'Tim',
  2: 'Matt'
};

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

【讨论】:

    【解决方案4】:

    虽然您有数字键并且顺序没有间隔,但您可以使用Object.assign,将数组作为目标,将给定对象作为源。

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

    【讨论】:

      【解决方案5】:

      这是常用的一种:

      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)
      

      【讨论】:

        猜你喜欢
        • 2019-12-02
        • 1970-01-01
        • 2019-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-14
        • 2017-08-25
        相关资源
        最近更新 更多