javascript - 如果文本相同,如何从集合中推出一个数组
问题描述
假设我有一个数组:
setArray = [{index: 1, answer: 'test'},
{index: 2, answer: 'another test'},
{index: 3, answer: 'test'}];
不做冗长的 if else 语句遍历每个喜欢:
if(setArray[0].answer == setArray[1].answer){
// do this
}
if(setArray[1].answer == setArray[2].answer){
// do this
}
有没有办法做一个语句来查看 3 个文本中的每一个并比较它们,如果它们完全匹配,则会将每个匹配的数组删除到一个新数组中(出于验证目的)。就像:
var makeArray = [];
if( //check each array){
makeArray.push(// arrays that match);
}
解决方案
您可以使用简单的哈希映射!
let setArray = [
{index: 1, answer: 'test'},
{index: 2, answer: 'another test'},
{index: 3, answer: 'test'}
],
hash = {};
setArray.map((o) => !hash[o.answer] ? hash[o.answer] = [o] : hash[o.answer].push(o));
console.log(hash['another test']);
console.log(hash['test']);
这确保您在 O(n) 中执行此操作,并且从散列访问值需要 O(1)。
推荐阅读
- int - 你如何增加从 llength 返回的数字?
- c++ - C++ 编译器抱怨没有默认构造函数
- r - 使用 dplyr::across 执行 dplyr::select
- javascript - 在 Iterables 上使用数组方法
- python - 不和谐Py。从字符串中获取数字
- google-apps-script - 从 Zoome 捕获 Webhook
- javascript - 我有几个功能可以做同样的事情。我如何将它们全部放在一个函数中?
- c++ - 在 QtWebEngine 中捕获 JavaScript 事件
- python - 如何在情节人物周围放置一个白框
- spring-data-cassandra - 通过以时间戳作为聚类列的复合键查询