如何在数组中获取哈希值

时间:2015-03-07 23:12:28

标签: javascript

我有一个哈希数组,如何获取数组中哈希集的位置?

在下面的示例中,我想找到某个位置在路径上的位置但是会导致“找不到”

var path = [{x: 42, y: 8}, {x: 42, y: 7}, {x: 42, y: 6}];
var location = {x: 42, y: 6};
var a = path.indexOf(location); // this result is -1 

3 个答案:

答案 0 :(得分:3)

那是因为location对象和数组中的相应对象指向内存中的不同位置,并且JavaScript解释器认为它们不相等,即使{} === {}导致{{1}这些是2个唯一的对象,但是:

false

请注意,数字等原始值不是这种情况。

对于过滤相应的对象,您应该遍历数组并将每个元素的x和y属性与var a = {}, b = a; if (a === b) // true 对象的x和y属性进行比较,如:

location

答案 1 :(得分:1)

只需要添加到解决方案选项,您就可以使用Lodashcustom array find function来迭代集合并找到所需的对象。

使用Array.prototype.findIndex或它的polyfill

function Point(x, y) {
  this.x = x;
  this.y = y;
} 

Point.prototype = {
  equal: function(point) { 
    if (point.x == this.x && point.y == this.y) {
      return true; 
    } 

    return false;
  }
}

point1 = new Point(6,1);

console.log([ 
  new Point(4,0), 
  new Point(6,1), 
  new Point(8,12)].findIndex(
    function(element, index, array){
      return element.equal(point1);
    })); 

>> 1

使用Lodash findIndex

var users = [
  { 'user': 'barney',  'age': 36, 'active': true },
  { 'user': 'fred',    'age': 40, 'active': false },
  { 'user': 'pebbles', 'age': 1,  'active': true }
];

// using the `_.matches` callback shorthand
_.findIndex(users, { 'user': 'fred', 'active': false });
// → 1

答案 2 :(得分:0)

这取决于你想要什么。如果您想与特定对象进行比较,那么您已经做得对了。例如:

var foo = { x: 1, y: 3 };
var not_foo = { x: 1, y: 3 };
var arrayOfThings = [foo, { x:3, y:4 }];

// this will work because foo is in there
var index = arrayOfThings.indexOf(foo);

// this will not work because not_foo is not in there
var fails = arrayOfThings.indexOf(not_foo);

如果你想找到一个相同的对象,你必须变得棘手。您可以使用underscore这样的库,它同时具有适用的filterfind方法。你也可以使用类似的东西:

var foo = { x: 1, y: 3 };
var not_foo = { x: 1, y: 3 };
var arrayOfThings = [foo, { x:3, y:4 }];

arrayOfThings.forEach(function(obj){
    if (obj.x == foo.x && obj.y == foo.y) {
    // we found a match so do something I guess!
    }
});