首页 > 解决方案 > 如果文本相同,如何从集合中推出一个数组

问题描述

假设我有一个数组:

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);
}

标签: javascriptjqueryarrays

解决方案


您可以使用简单的哈希映射!

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)。


推荐阅读