如何在 JavaScript 中检查多个对象属性两次
How to check multiple object properties twice in JavaScript?
有很多不错的函数,如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
位置有两条线,则设置为 visible 为 false,否则设置为 true。
现在的问题:如何检查数组中的多个对象属性(x & y 必须相同)并处理它们?
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
是否已经在索引中。如果是,请使它们不可见,反之亦然。 - 将密钥存储在索引中,重复此操作。
一个简单的(尽管如果数组变得非常大,则效率不高)是遍历数组并检查是否有任何重复项,如下所示:
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
}
}
}
相关文章:
- Meteor Router数据函数被调用两次
- 从MySQL数据库中获取输入数据需要两次页面刷新
- Module.start()已激发两次
- Jquery点击事件必须点击两次
- Append元素在运行两次函数后不显示
- 防止双击执行两次jQuery post请求
- 我必须点击两次才能激活任何按钮操作(离子/角度)
- 单击jQuery会激发两次
- 如何避免在树上走两次
- button.单击两次删除附加操作后不工作
- 由于$compile,Javascript(Angular)嵌套指令加载了两次
- 单击元素两次后执行操作
- AngularJs正在阻止链接被点击两次
- 为什么我的路线处理程序会触发两次
- 如何在 JavaScript 中检查多个对象属性两次
- “index.swf”嵌入在“index.html”中,在一个页面中显示同一网站两次.HTML 标题标签/属性也显示值“
- 如何使用javascript点击同一个类或id两次并获得不同的属性
- 如何避免运行代码两次使用ko属性
- iframe在设置src属性时调用Action方法两次
- 用不同的属性定义同一个Grunt Task两次