【问题标题】:javascript , comparison between the same element of two arrayjavascript,两个数组的相同元素之间的比较
【发布时间】:2016-04-05 21:19:28
【问题描述】:

我有两个数组

章节

[ "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" 
]

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

【问题讨论】:

  • 我尝试循环遍历两个字符串并尝试比较数组,但问题是我不知道如何检查数组文件的元素内部
  • 这个还不清楚,你想让输出是什么样子的?
  • 我想把文件的元素放到章节中,例如属于化学的元素(文件数组)应该放在化学(章节数组)下
  • @PranavKaushik 你在问如何获得类似Javascript objects 的东西吗?
  • 我希望它像化学一样打印 //来自数组章节 ==>>./pranav/Chemistry/tesgdfgdfg.md "./pranav/Chemistry/test3.md "./pranav/Chemistry/ test2.md

标签: javascript arrays


【解决方案1】:

如果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

【讨论】:

  • 我想比较两个阵列化学只是阵列章节中的一个例子
  • 您的问题还不清楚。这怎么不能满足您的需求?
  • @PranavKaushik 根据您提供的信息进行了更新。一旦你有了一个对象,遍历它的键和值就相对简单了。
  • 最后一个只是打印化学文件
  • @PranavKaushik 刷新您的环境并重试。我犯了一个小错字,并从该行中删除了subject,以支持chapter[i]。现在它将起作用。记住:操作的结果存储在result
【解决方案2】:

您可以简单地使用该函数并循环
文件数组以获取所有文件数组元素的数组。
每个数组都有搜索词的名称(例如“化学”)。
我建议做这个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")));

【讨论】:

  • 只是打印文件数组
  • 我不希望它只是为了化学
  • Chemistry ====>>>所有包含化学的文件,就像章节中的每个主题一样,而且这个列表是动态的,所以一些元素会添加或删除,所以我想要每个数组中的元素
  • @PranavKaushik 现在您会为每次搜索返回一个数组。
猜你喜欢
  • 2021-08-08
  • 1970-01-01
  • 1970-01-01
  • 2020-08-13
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多