首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript:如何匹配array和json?

Javascript:如何匹配array和json?
EN

Stack Overflow用户
提问于 2016-07-25 15:29:59
回答 3查看 94关注 0票数 1

如何找到数组和json之间的匹配?

代码语言:javascript
复制
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)
    }
});

结果应该是:

代码语言:javascript
复制
match: world
match: pm2.5
match: hum

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-25 15:36:26

您可以使用哈希表进行查找。

代码语言:javascript
复制
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);

票数 3
EN

Stack Overflow用户

发布于 2016-07-25 15:34:31

您可以通过在此上下文中使用find()来完成此操作,

代码语言:javascript
复制
fields.forEach(function(field, index) {       
   if(species.find((itm) => itm.code_name == field.code_name)) {
      console.log("match" , " : " , field.code_name)
   }
});

或者更好的选择是使用some(),因为它将返回布尔值形式的结果,

代码语言:javascript
复制
fields.forEach(function(field, index) {       
   if(species.some((itm) => itm.code_name == field.code_name)) {
      console.log("match" , " : " , field.code_name)
   }
});
票数 1
EN

Stack Overflow用户

发布于 2016-07-25 15:44:23

如果你不能使用新的JS特性,你可以像这样嵌套两个循环。

代码语言:javascript
复制
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(', ');
代码语言:javascript
复制
<div id="result"></div>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38561964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档