我从我的数据库中提取了许多对象作为searchResult对象(我已定义和设置的模型)。
现在我需要将这些对象放在JS数组中 - 如果它们尚未包含在它们中。 JS数组有一个" if --- in array"但它并没有真正比较自定义对象。最简单的解决方案是使用双循环并使用数组中每个已存在的对象检查每个传入对象,但我的searchResult对象有几个我无法花时间比较的属性。
那么有没有办法检查,例如,Ember本身是否(searchResult1 == searchResult2)?
我知道有一种类似的混合,但我不确定这是否有帮助 - 甚至如何使用它。
答案 0 :(得分:6)
Ember为Array原型提供了一个有用的方法addObject
来解决这类问题。 arr.addObject(item)
会将item
注入arr
,如果该项目尚未存在的话。{/ p>
http://emberjs.com/api/classes/Ember.MutableArray.html#method_addObject:
var cities = ["Chicago", "Berlin"];
cities.addObject("Lima"); // ["Chicago", "Berlin", "Lima"]
cities.addObject("Berlin"); // ["Chicago", "Berlin", "Lima"]
还有addObjects
,它接受一系列项目并添加每个项目尚不存在:arr.addObjects([itemA, itemB, itemC])
。
编辑:正如GJK正确指出的那样,这是用===
实现的,因此对于复杂对象,它会比较引用而不是值。因此,如果您要添加Ember模型,或者如果您要添加Primatives,这将正常工作,但如果您只是简单地比较对象,则会失败。
标准Javascript([1] === [1] // => false
,但var i = [1]; i === i // => true
)