【问题标题】:Create a JavaScript Array using value from JavaScript Objects使用 JavaScript 对象中的值创建 JavaScript 数组
【发布时间】:2019-04-05 08:32:57
【问题描述】:

我是 JavaScript 新手,我有一个 JavaScript 对象

[{G4S: "31"},{G4S: "23"},{G4S: "31"},{G4S: "49"},{G4S: "110"},{G4S: "115"},{G4S: "104"}]

我想创建一个类似的数组

[31, 23, 31, 49, 110, 115, 104]

我提到了一些链接,但它们展示了如何从数组创建对象,而不是从对象创建数组。 How to get the key value in JSON object?

Creating javascript object from array values

Creating a JavaScript Object from two arrays

我试过这样:

for (var i = 0; i < chartDataG4S.length; i++) {
        var data = chartDataG4S[i]['G4S'];
        console.log(data);
      }

但它不会创建一个数组。我被困住了,欢迎任何形式的帮助,在此先感谢。

【问题讨论】:

    标签: javascript arrays javascript-objects


    【解决方案1】:

    你可以简单地使用.map():

    let data = [{G4S: "31"},{G4S: "23"},{G4S: "31"},{G4S: "49"},{G4S: "110"},{G4S: "115"},{G4S: "104"}];
    
    let result = data.map(({ G4S }) => Number(G4S));
    
    console.log(result);

    【讨论】:

      【解决方案2】:

      使用.map提取每个对象中的G4S属性,并强制转换为数字,在此过程中创建一个新数组:

      const input = [{G4S: "31"},{G4S: "23"},{G4S: "31"},{G4S: "49"},{G4S: "110"},{G4S: "115"},{G4S: "104"}];
      const output = input.map(({ G4S }) => Number(G4S));
      console.log(output);

      或者,for 循环版本,如果您愿意的话:

      const input = [{G4S: "31"},{G4S: "23"},{G4S: "31"},{G4S: "49"},{G4S: "110"},{G4S: "115"},{G4S: "104"}];
      const output = [];
      for (let i = 0; i < input.length; i++) {
        output.push(Number(input[i].G4S));
      }
      console.log(output);

      【讨论】:

      • 太好了,谢谢哥们,它工作正常。快速提问,为什么我们使用 const 而不是 var?
      • var 有一些问题可能会绊倒你——例如,它有不直观的函数作用域,而不是块作用域,并且会被提升。 const 没有这些问题,另外,当您看到 const 时,您知道永远不会重新分配以下变量,这使得阅读和理解代码一目了然更轻松。最好尽可能使用const,在不能使用时使用let(没有var 的问题,但可以重新签名),永远不要使用var。 (在构建过程中转译为 ES5 以支持古老的浏览器)
      【解决方案3】:

      let chartDataG4S = [{G4S: "31"},{G4S: "23"},{G4S: "31"},{G4S: "49"},{G4S: "110"},{G4S: "115"},{G4S: "104"}];
      
      let result = chartDataG4S.map(o => Number(o.G4S));
      console.log(result);

      函数 map() 源自函数式编程并且是 JavaScript 数组中固有的,便于访问每个对象的 G4S 属性的值,即数字字符串。函数 Number() 获取每个字符串值并将其转换为数字。然后将该返回值添加到新的结果数组中。

      虽然 Array 对象的 map() 使用起来很方便,但请注意,您也可以通过显式迭代获得相同的结果,如下所示:

      let chartDataG4S = [{G4S: "31"},{G4S: "23"},{G4S: "31"},{G4S: "49"},{G4S: "110"},{G4S: "115"},{G4S: "104"}]
      
      let result = [];
      
      for (var i=0; i in chartDataG4S; i++) {
        result.push(Number(chartDataG4S[i].G4S));
      }
      
      
      console.log(result);

      【讨论】:

        【解决方案4】:

        试试这个

        var newArray = [];  // New array declaration to be used to push the values.
        var objArray = [{G4S: "31"},{G4S: "23"},{G4S: "31"},{G4S: "49"},{G4S: "110"},{G4S: "115"},{G4S: "104"}];  // Your array of objects
        
        objArray.forEach(function(elem){
            newArray.push(elem.G4S);
        });
        

        【讨论】:

          【解决方案5】:

          您可以通过简单的步骤完成此操作,使用map 获取对象的所有值的数组,然后将所有值合并为一个。

          let data = [{G4S: "31"},{G4S: "23"},{G4S: "31"},{G4S:"49"},{G4S: "110"},{G4S: "115"},{G4S: "104"}];
          
          //step 1
          let arr = data.map(da => Object.values(da)); // irrespective of keys
          //step 2 
          let result = arr.reduce((acc, val) => acc.concat(val), []);
          console.log(result);
          // in one liner.
          console.log(data.map(da => Object.values(da)).reduce((acc, val) => acc.concat(val), []))

          【讨论】:

            【解决方案6】:

            这基本上是一个数组,你可以这样做。

            let arr = [{G4S: "31"},{G4S: "23"},{G4S: "31"},{G4S: "49"},{G4S: "110"},{G4S: "115"},{G4S: "104"}];
            let arr1 =[];
            for(let i=0; i<are.length; i++)
                arr1.push(are[i].G4S);
            

            【讨论】:

            • 所以你只需要在你的代码中使用 data.push 而不是 data = something。
            • 并在循环外初始化数据数组
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-03-06
            • 1970-01-01
            • 2019-01-15
            • 2013-10-12
            • 2015-02-25
            • 2015-10-18
            • 1970-01-01
            相关资源
            最近更新 更多