map()返回带有对象的值对

时间:2019-07-20 10:37:59

标签: javascript google-apps-script

我有下面的图片之类的对象。

enter image description here

我想使用map()来检索类似对象

{
  "2643216":{pg:1,pt:1},
  "1304681":{pg:1,pt:1}
}

这是我的代码。

Object.keys(obj).map(function(x){
                return {obj[x].number:{'pg':obj[x].pg,'pt':obj[x].pt}}
                })

但是错误可能会出现在obj[x].number上。

调试错误通知我: (colon)的无知。

我犯错了吗,您可以提出任何调整建议-

或其他方式可以检索我想要的对象?

谢谢。

2 个答案:

答案 0 :(得分:1)

这应该可以完成工作:

function groupByNumber(data) {

  return Object
    .keys(data)
    .reduce(function(result, key) {
      var value = data[key];

      result[value.number] = { pt: value.pt, pg: value.pg };

      return result;
    }, {});
};

var data = {
  'LKB_something': { number: 1, pg: 1, pt: 5 },
  'LKB_something_else': { number: 2, pg: 1, pt: 5 },
  'LKB_something_else_1': { number: 3, pg: 1, pt: 5 },
};

console.log('result', groupByNumber(data));


// ES-NEXT would let you be more coincise
const groupByNumber = data => Object.values(data).reduce(
  (result, { number, ...rest }) => ({ ...result, [number]: rest }),
  {},
);

答案 1 :(得分:0)

对于JavaScript对象中的动态键,您需要使用方括号来生成计算出的属性名称:

return { [obj[x].number]: { "pg": obj[x].pg, "pt": obj[x].pt }}

您可以使用Object.values和箭头函数的隐式返回以及解构和简写属性表示法来简化代码,如下所示:

Object.values(obj).map(({ number, pg, pt }) => ({ [number]: { pg, pt }}))

请注意,上面的方法返回一个对象数组-如果需要一个对象:

Object.values(obj).reduce((a, { number, pg, pt }) => ({ ...a, [number]: { pg, pt }}), {})