[英]Split an object in to array of objects based on similar values
var pr = {
name: "ball",
race: "ball",
weapon: "axe",
};
var save=new Object;
var keys=Object.keys(pr);
for(var k in pr) {
}
console.log(save); // should end up with {name:'ball',race:'ball'}
If I have understood the question correctly, one option is: 如果我正确理解了这个问题,则可以选择以下一种方法:
const keys = Object.keys(pr);
const ret = keys.reduce((ret, k, i) => {
const f = keys.find((k2, i2) => i !== i2 && pr[k] === pr[k2]);
if (f) ret[k] = pr[k];
return ret;
}, {});
Here is what I came up with. 这是我想出的。
var pr = {
name: "ball",
race: "ball",
weapon: "axe"
};
const dupValues = Object.values(pr).reduce(
(acc, cur) => ({ ...acc, [cur]: (acc[cur] || 0) + 1 }),
{}
);
const result = Object.keys(pr)
.filter(key => dupValues[pr[key]] > 1)
.reduce((acc, curr) => ({ ...acc, [curr]: pr[curr] }), {});
console.log(result);
// {name:'ball',race:'ball'}
One way to do it is use the save
object as a histogram, keeping track of duplicates. 一种方法是将save
对象用作直方图,并跟踪重复项。 Then, filter out any keys with 0 count using reduce
. 然后,使用reduce
过滤掉任何计数为0的键。 This should have better performance than a linear function like find
: 它应该比线性函数(如find
具有更好的性能:
var pr = { name: "ball", race: "ball", weapon: "axe" }; var save = {}; for (var k in pr) { save[pr[k]] = pr[k] in save ? save[pr[k]] + 1 : 0; } var result = Object.keys(pr).reduce((a, e) => { if (save[pr[e]]) { a[e] = pr[e]; } return a; }, {}); console.log(result);
It works. 有用。 Simple and clear. 简单明了。 References : Array.reduce() 参考: Array.reduce()
Iterate through each key value pair, and accumulate the result until the loop ends. 遍历每个键值对,并累积结果,直到循环结束。
var pr = { name: "ball", race: "ball", weapon: "axe", item:"bat", newitem:"bat", newweapon: "axe" }; var result = Object.keys(pr).reduce(function(acc, key){ var ispresent = false; acc.forEach(function(obj,i){ if(ispresent) return; if(Object.values(obj)[0]===pr[key]) { obj[key]=pr[key]; ispresent = true; } }); if(!ispresent) { var newobj = {};newobj[key]=pr[key]; acc.push(newobj) } return acc; },[]) console.log(result)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.