我有一个像这样的对象:
{
a : 'foo',
b : 'bar',
c : 'foo',
d : 'baz',
e : 'bar'
}
Run Code Online (Sandbox Code Playgroud)
我想减少重复,如:
{
ac : 'foo',
be : 'bar',
d : 'baz'
}
Run Code Online (Sandbox Code Playgroud)
有什么好办法呢?
一些警告:
遍历对象的每个属性并构造另一个对象,其中键是第一个对象的值,值是键列表(从第一个开始)。然后你返回第二个对象并得出最终结果。
像这样的东西:
function noDupes(obj) {
var o2 = {};
for (var k in obj) {
if (obj.hasOwnProperty(k)) {
var list = o2[obj[k]] || [];
list.push(k);
o2[obj[k]] = list;
}
}
var rv = {};
for (k in o2) {
if (o2.hasOwnProperty(k))
rv[o2[k].join('')] = k;
}
return rv;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果原始对象的值不是字符串,那么事情就会变得更加复杂:只有字符串才能成为 Javascript 对象中的属性键。在这种情况下,您可以寻找更通用的哈希实现。如果您的对象往往非常小(少于 10 个左右的属性),您可以编写 n 2版本,在其中您只需迭代属性,然后对每个属性再次迭代。但是,如果您的对象可能很大并且您必须多次执行此操作,那么这可能是一个坏主意。