【问题标题】:How to compare two JSON values based on the key name in javascript?如何根据javascript中的键名比较两个JSON值?
【发布时间】:2015-12-05 13:23:07
【问题描述】:
我有两个 JSON 数组,比如
array1=[{a:1,b:2,c:3,d:4}]
&
array2=[{a:2,b:5,c:3,d:4}]
是否有任何方法可以找到数组 2 中存在的 array1 中的一个键的值。在数组 1 中,键 b 包含值 2,而 array2 还包含一个值为 2 的键 a。我如何捕获数组 2 的键名,与数组中的一个键具有相同的值。
【问题讨论】:
标签:
javascript
arrays
json
【解决方案1】:
我不太明白您是否有兴趣对数组或对象进行操作 - 因为您的示例是一对单元素数组,并且比较显然是在数组中的对象之间。
也就是说,如果您的目标是比较两个对象,并返回对两者都相同的键集,您可以这样做
obj1 = {a:1,b:2,c:3,d:4};
obj2 = {a:2,b:5,c:3,d:4};
function sameKeys(a,b) {
return Object.keys(a).filter(function(key) {
return a[key] === b[key];
});
}
console.log(sameKeys(obj1, obj2));
当我运行它时,我得到:
[ 'c', 'd' ]
我希望这就是你要问的......
【解决方案2】:
编写了一个原型函数来比较一个对象和另一个对象。
var obj1 = {a: 1, b: 2, c: 3, d: 4};
var obj2 = {a: 2, b: 4, c: 100, d: 200}
Object.prototype.propertiesOf = function(visitorObj) {
result = {};
//Go through the host object
for (thisKey in this) {
//Exclude this function
if (!this.hasOwnProperty(thisKey))
continue;
//Compare the visitor object against the current property
for (visitorKey in visitorObj) {
if (visitorObj[visitorKey] === this[thisKey])
result[visitorKey] = thisKey;
}
}
return result;
}
console.log(obj1.propertiesOf(obj2));
只需通过传递另一个对象作为参数来调用任何对象的propertiesOf 函数。它返回一个对象,该对象具有相互链接的相似键。
上面的例子会导致:
{a: "b", b: "d"}
【解决方案3】:
您似乎想要这样的事情:创建一个函数来查找第二个对象中具有给定值的所有键。然后将值从第一个对象传递给该函数。
obj1={a:1,b:2,c:3,d:4};
obj2={a:2,b:5,c:3,d:4};
function findKeysByValue(obj, v) {
var results = [];
for (var k in obj) {
if (obj.hasOwnProperty(k) && v == obj[k]) {
results.push(k);
}
}
return results;
}
console.log(findKeysByValue(obj2, obj1['b'])); // ['a']