【问题标题】:map on javascript object - get the object keys在 javascript 对象上映射 - 获取对象键
【发布时间】:2020-06-16 06:44:14
【问题描述】:

我需要像这样映射一个对象

let obj = { 
    a : { value : 5, meta: "sss" },
    b : { value : 1, meta: "rrr" },
    a : { value : 6, meta: "nnn" },
}`

像这样获取和反对

{ a: 5, b: 1, c:6}

我无法将“key”作为字符串获取。

我试过了:

let yyy = Object.keys(obj).map(function (key) {
    return { key: obj[key].value };
});

但它会生成一个 {key : 5}... 的“数组”(而我需要一个对象),其中包含字符串“key”而不是密钥的名称。

【问题讨论】:

标签: javascript ecmascript-6 javascript-objects


【解决方案1】:

您可以获取条目并为新对象映射键和属性value

let object = { a : { value: 5, meta: "sss" }, b : { value: 1, meta: "rrr" }, c : { value: 6, meta: "nnn" } },
    result = Object.fromEntries(Object
        .entries(object)
        .map(([key, { value }]) => [key, value])
    );

console.log(result);

【讨论】:

    【解决方案2】:

    你可以使用.reduce

    let obj = { 
        a : { value : 5, meta: "sss" },
        b : { value : 1, meta: "rrr" },
        c : { value : 6, meta: "nnn" },
    }
    
    var res = Object.keys(obj).reduce((acc, elem)=>{
      acc[elem] = obj[elem].value;
      return acc;
    },{});
    
    console.log(res)

    【讨论】:

      【解决方案3】:

      在下面试试这个:

      在您的输入中使用 Object.keys。

      let obj = { 'a': {value: 5, meta: "sss"},
                  'b': {value: 1, meta: "rrr"},
                  'c': {value: 6, meta: "nnn"},
                };
      
      let output = {};
      Object.keys(obj).map(function (item) {
          output[item] = obj[item]['value']
      });
      console.log(output)
      
      
      Output : { a: 5, b: 1, c:6}
      

      【讨论】:

      • map 返回一个新数组。不适合这种情况。更好的选择是forEach
      【解决方案4】:

      尝试使用reduce而不是map..

      const obj = { 
          a : { value : 5, meta: "sss" },
          b : { value : 1, meta: "rrr" },
          c : { value : 6, meta: "nnn" },
      }
      
      
      const res = Object.keys(obj).reduce( (res, key) => {
        res[key] = obj[key].value
        return res;
      }, {});
      
      console.log(res)
      

      【讨论】:

        【解决方案5】:

        您可以使用reduce 函数来实现您的结果。

        let result = Object.keys(obj).reduce((acc,k) => {
            return {
                ...acc,
                [k]:obj[k].value
            };
        },{})
        console.log(result); // {"a":5,"b":1,"c":6}
        

        希望对你有帮助。

        【讨论】:

          【解决方案6】:

          使用for..of 循环和解构值

          let obj = { 
              a : { value : 5, meta: "sss" },
              b : { value : 1, meta: "rrr" },
              c : { value : 6, meta: "nnn" },
          }
          const data = Object.entries(obj);
          let result={};
          for(let [key, {value}] of data) {
            result[key] = value;
          }
          console.log(result);
          

          【讨论】:

            猜你喜欢
            • 2023-03-06
            • 1970-01-01
            • 1970-01-01
            • 2020-06-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-09-19
            相关资源
            最近更新 更多