如何找到数组和json之间的匹配?
var fields = [ { public_name: 'hello', code_name: 'world' },
{ public_name: 'particles', code_name: 'pm2.5' },
{ public_name: 'humidity', code_name: 'hum' } ]
var species = [{"code_name":"hum","public_name":"humidity"},
{"code_name":"pm2.5","public_name":"particles"},
{"code_name":"world","public_name":"hello"}]
fields.forEach(function(field, index) {
if (field.code_name === species.code_name) {
console.log('match:' + code_name)
}
});结果应该是:
match: world
match: pm2.5
match: hum有什么想法吗?
发布于 2016-07-25 15:36:26
您可以使用哈希表进行查找。
var fields = [{ public_name: 'hello', code_name: 'world' }, { public_name: 'particles', code_name: 'pm2.5' }, { public_name: 'humidity', code_name: 'hum' }],
species = [{ "code_name": "hum", "public_name": "humidity" }, { "code_name": "pm2.5", "public_name": "particles" }, { "code_name": "world", "public_name": "hello" }],
match,
hash = Object.create(null),
getHashKey = function (o) { return o.public_name + '|' + o.code_name; };
fields.forEach(function (a) {
hash[getHashKey(a)] = true;
});
match = fields.filter(function (a) {
return hash[getHashKey(a)];
});
console.log(match);
发布于 2016-07-25 15:34:31
您可以通过在此上下文中使用find()来完成此操作,
fields.forEach(function(field, index) {
if(species.find((itm) => itm.code_name == field.code_name)) {
console.log("match" , " : " , field.code_name)
}
});或者更好的选择是使用some(),因为它将返回布尔值形式的结果,
fields.forEach(function(field, index) {
if(species.some((itm) => itm.code_name == field.code_name)) {
console.log("match" , " : " , field.code_name)
}
});发布于 2016-07-25 15:44:23
如果你不能使用新的JS特性,你可以像这样嵌套两个循环。
var fields = [
{ public_name: 'hello', code_name: 'world' },
{ public_name: 'hello', code_name: 'NO MATCH' },
{ public_name: 'particles', code_name: 'pm2.5' },
{ public_name: 'humidity', code_name: 'hum' }
];
var species = [
{"code_name":"hum","public_name":"humidity"},
{"code_name":"pm2.5","public_name":"particles"},
{"code_name":"world","public_name":"hello"}
];
var matches = [];
fields.forEach(function(field, index) {
species.forEach(function(spec) {
if (spec.code_name === field.code_name) {
matches.push(field.code_name);
}
});
});
document.getElementById('result').textContent = matches.join(', ');<div id="result"></div>
https://stackoverflow.com/questions/38561964
复制相似问题