在javascript关联数组中查找重复值(哈希)

时间:2016-07-21 15:42:20

标签: javascript arrays hash

拥有如下所示的键值对

var point = [];
point["I1"] = 1000;
point["I2"] = 2000;
point["I3"] = 1000;
point["I4"] = 5000;
point["I5"] = 2000;
point["I6"] = 4000;

想要查找重复值,结果哈希应包含ONLY DUPLICATE值信息。

result["1000"] = " I1,I3";
result["2000"] = "I2,I5";

重复值应该是结果哈希的键。

我对数组进行排序,但无法遍历散列以检查重复值以构建结果散列

https://fiddle.jshell.net/jbs9y896/1/

2 个答案:

答案 0 :(得分:3)

您可以使用循环键点检查所有值。 我稍微改变了你的条款。您可以为Array设置额外的密钥,但最好使用Object。 每个值的结果都是一个数组,只需在每个数组上调用toString即可将其转换为逗号分隔值。

修改

在编辑请求时,要包含only duplicates您可以再次循环(但这次超过hash)并获取具有多个结果的内容。

var point = {
  I1: 1000,
  I2: 2000,
  I3: 1000,
  I4: 5000,
  I5: 2000,
  I6: 4000,
};

var hash = Object.create(null);
var result = Object.create(null);

Object.keys(point).forEach(k => {
  var grp = point[k];
  (grp in hash) ? hash[grp].push(k): (hash[grp] = [k]);
});

for (key in hash)
  if (hash[key].length > 1)
    result[key] = hash[key].toString();

console.log(hash['1000'].toString());
console.log(hash);
console.log(result);

答案 1 :(得分:1)

获取result["1000"] = ['I1','I3']而不是var point = {}; point["I1"] = 1000; point["I2"] = 2000; point["I3"] = 1000; point["I4"] = 5000; point["I5"] = 2000; point["I6"] = 4000; var hash = Object.create(null); Object.keys(point).forEach(k => { var grp = point[k]; (grp in hash) ? hash[grp] = hash[grp] += ',' + k: (hash[grp] = k); }) console.log(hash);

void* PyArray_GetPtr(PyArrayObject* aobj, npy_intp* ind)