Bry*_*yan 0 javascript angularjs
我正在尝试使用以下代码在数组中搜索对象:
function countUniqueBoxes(array,key)
{
var output = [];
var value = false;
var obj = false;
for(var i = 0; i < array.length; ++i)
{
value = array[i][key];
obj = {'Box': value};
if(output[i] === obj)
{
continue;
}
else
{
output.push(obj);
}
}
return output;
}
Run Code Online (Sandbox Code Playgroud)
传递给此函数的数组包含具有重复值的多个对象.正如您所看到的,我正在尝试整理重复项,并插入唯一值,但相反,所有值都添加到我的输出数组中,甚至是重复值.
如果我喜欢这样做:
for(var i = 0; i < array.length; ++i)
{
value = array[i][key];
if(output.indexOf(value) === -1)
{
output.push(value);
}
}
Run Code Online (Sandbox Code Playgroud)
有用.唯一值将添加到我的输出数组中.但我想将值作为对象添加到我的数组中.
怎么了?
您正在使用严格比较运算符(===)来比较两个完全不同的对象.这不起作用,即
{} === {} // Never true!
Run Code Online (Sandbox Code Playgroud)
如果需要对类似于重复的对象进行排序,则需要使用其他机制,例如比较对象的属性.
我认为这可以归结为您希望如何在数组中定义"重复"对象.有两种可能性:
根据您的情况,解决方案会有很大差异,但通用方法将是循环内的循环 - 主循环将接受数组中的一个对象,然后再次遍历同一个数组以查看它是否在数组中不止一次.
绝对有优化空间.也许你甚至可以重构你的代码,如果它首先看起来像重复,就不允许将对象插入到数组中.
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |