有许多不错的功能,例如filter()
,hasOwnProperty()
或indexOf()
,但我不知道如何在我的问题中处理它们。
首先,让我告诉你我目前的代码:
var Lines = [];
// [..] pushing a lot of objects in the Lines Array, now it is like this:
Lines[0] = {line: 'a', x: 2, y: 4, z: 3, visible: true}
Lines[1] = {line: 'b', x: 3, y: 4, z: 3, visible: true}
Lines[2] = {line: 'c', x: 5, y: 3, z: 3, visible: true}
Lines[3] = {line: 'd', x: 1, y: 4, z: 3, visible: true}
Lines[4] = {line: 'e', x: 2, y: 4, z: 3, visible: true}//same as Lines[0]
Lines[5] = {line: 'f', x: 6, y: 6, z: 3, visible: true}
Lines[6] = {line: 'g', x: 5, y: 7, z: 3, visible: true}
Lines[7] = {line: 'h', x: 3, y: 4, z: 3, visible: true}//same as Lines[1]
//..
现在我想要一个函数,我可以在x和y相同的多行。 (例如index 0 & 4
是相同的,7和1是相同的)如果在同一x & y
位置有两行,则将其设置为false,否则将其设置为true。
现在的问题是:如何检查数组中的多个对象属性(x& y必须相同)并处理它们?
答案 0 :(得分:1)
var index = {},
lines = [/* your lines here */];
lines.forEach(function (line) {
var key = line.x + ':' + line.y;
line.visible = !(key in index);
index[key] = true;
});
x
和y
的组合将是唯一属性(即key
)。我们可以使用一个单独的字符串:line.x + ':' + line.y
。注意使用x
和y
中不会自然出现的分隔符,冒号可以用于数字。key
是否已经在索引中。如果是,请让它们不可见,反之亦然。答案 1 :(得分:0)
一个简单的(如果数组变得非常大,虽然不是很有效)解决方案是通过数组并检查任何重复项,如下所示:
for (var i=0;i<Lines.length;i++) {
for (var j=i+1;j<Lines.length;j++) {
if (Lines[i].x==Lines[j].x&&Lines[i].y==Lines[j].y) {
Lines[j].visible = false;
//...and whatever action you want to perform on a duplicate
}
}
}