我有下面的图片之类的对象。
我想使用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)
的无知。
我犯错了吗,您可以提出任何调整建议-
或其他方式可以检索我想要的对象?
谢谢。
答案 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 }}), {})