javascript,比较两个数组的相同元素

时间:2016-04-05 21:19:28

标签: javascript arrays

我有两个数组

[ "Chemistry", "Maths", "Physics" ] 

档案

[ "./pranav/Chemistry/tesgdfgdfg.md", 
  "./pranav/Chemistry/test3.md", 
  "./pranav/Chemistry/test2.md", 
  "./pranav/Physics/test45.md", 
  "./pranav/Physics/test22.md", 
  "./pranav/Maths/test2.md" 
]

我想检查并打印包含章节元素的文件元素 从上面你可以看到化学是三元素所以我想打印

2 个答案:

答案 0 :(得分:0)

如果file是您的文件名数组,

file.filter((filename) => new RegExp("Chemistry").test(filename))

将为您提供数组中包含Chemistry的所有文件名:

file.filter((filename) => new RegExp("Chemistry").test(filename))

> ["./pranav/Chemistry/tesgdfgdfg.md", "./pranav/Chemistry/test3.md",
   "./pranav/Chemistry/test2.md"]

类似的策略可用于查找其中包含PhysicsMath的策略。

如果您要扩展搜索范围以合并chapter中的所有字符串,则可以单独循环显示这些键:

chapter.map(function(subject) { 
    return file.filter((filename) => new RegExp(subject).test(filename));
})

将为您提供一个数组列表,每个数组按顺序包含每个主题的file匹配元素。观察:

chapter.map(...)

> [[... all files with "Chemistry"...], [... all files with "Physics" ...]
  [... all files with "Maths"...]]

最后,如果你想从这些对象创建一个简单的对象,你可以将每个subject映射到它相应的文件名,你可以这样做:

var result = {}; // create empty object
for (subject of chapter){
    result[subject] = file.filter((filename) => new RegExp(subject).test(filename));
}

result
> {"Chemistry" : [... all files with "Chemistry" ...], ... }

或者查看the many ways to merge two arrays into an object together

答案 1 :(得分:0)

您可以简单地使用该功能并循环通过
文件数组,用于获取所有文件数组元素的数组 每个数组都有搜索词的名称(例如" Chemistry") 我建议你做这个lowercase



file = ["./pranav/Chemistry/tesgdfgdfg.md",
  "./pranav/Chemistry/test3.md",
  "./pranav/Chemistry/test2.md",
  "./pranav/Physics/test45.md",
  "./pranav/Physics/test22.md",
  "./pranav/Maths/test2.md"
];

chapter = ["Chemistry", "Maths", "Physics"];

function getMatching(x) {
  this[x] = new Array();
  file.forEach(function(e) {
    if (e.indexOf(x) >= 0) {
      this[x].push(e);
    }
  })
  return this[x];
}

document.write(JSON.stringify(getMatching("Chemistry")));