我有一个带有数字对的数组,需要在数组中找到匹配的对
numberStore = [ [0,0],[1,1],[1,2],[1,3],[1,4],[1,5]... ]
我希望能够找到1,4
。有没有一种方法可以不依赖numberStore[4]
来查找此数组?
答案 0 :(得分:4)
由于您需要经常执行此搜索,因此,我将构建一个哈希集,以避免一遍又一遍地进行映射和搜索。例如
const numberStore = [ [0,0],[1,1],[1,2],[1,3],[1,4],[1,5] ]
const hashedSet = new Set(numberStore.map(pair => pair.toString()))
// looks like ["0,0", "1,1", "1,2", "1,3", etc]
console.log([...hashedSet])
const search = (find) => {
return hashedSet.has(find.toString())
}
console.info('Find [1,4]', search([1,4]))
console.info('Find [4,1]', search([4,1]))
我已经使用Array.prototype.toString()
作为哈希函数,但是您可以替换其中为每对创建唯一且可比较的实体的任何东西。
答案 1 :(得分:3)
var numberStore = [
[0, 0],
[1, 1],
[1, 2],
[1, 3],
[1, 4],
[1, 5]
];
var oneFour = numberStore.find(function([a, b]) {
return a == 1 && b == 4;
});
console.log(oneFour);
或者,如果您更喜欢ES6 arrow syntax:
var numberStore = [
[0, 0],
[1, 1],
[1, 2],
[1, 3],
[1, 4],
[1, 5]
];
var oneFour = numberStore.find(([a, b]) => a == 1 && b == 4);
console.log(oneFour);
答案 2 :(得分:2)
另一种替代方法是使用方法some()测试条件元素。
var numberStore = [
[0,0],
[1,1],
[1,2],
[1,3],
[1,4],
[1,5]
];
var exists = numberStore.some(([a, b]) => a === 1 && b === 4);
console.log(exists ? "Pair [1,4] exists" : "Pair [1,4] don't exists");