繁体   English   中英

JavaScript对象循环-筛选并显示重复项一次

[英]JavaScript Object loop - Filter and show duplicates once

我有一些类似这样的代码:

var date = new Date();
var userMessage = {
    UserName: "Charlie",
    LastOnline: date.toDateString(),
    Name: "Charlie"
};
Object.keys(userMessage).forEach(function(user) {
   if (userMessage[user] == "Charlie") {
     document.write("Welcome Charlie!");
   }
});

但这工作正常,但我只希望文档写上“ Welcome Charlie!”。 一旦。 用户可能有两次相同的字段,我如何将其限制为一次?

不久,此函数将被angularJS ng-repeat包装。 也许可以使用过滤器执行一次此操作?

小提琴链接: https : //jsfiddle.net/dj5ka4g6/1/

谢谢。

一种选择是使用Object.values获取对象的值,通过Set重复数据删除,然后迭代:

 var date = new Date(); var userMessage = { UserName: "Charlie", LastOnline: date.toDateString(), Name: "Charlie" }; [...new Set(Object.values(userMessage))] .forEach((val) => { if (val === 'Charlie') console.log('Welcome Charlie'); }); 

或者,如您的代码似乎所暗示的那样,如果您只是在检查值中是否包含Charlie ,请使用.includes方法:

 var date = new Date(); var userMessage = { UserName: "Charlie", LastOnline: date.toDateString(), Name: "Charlie" }; if (Object.values(userMessage).includes('Charlie')) { console.log('Welcome Charlie'); } 

如果只需要重复数据删除的阵列,则:

 var date = new Date(); var userMessage = { UserName: "Charlie", LastOnline: date.toDateString(), Name: "Charlie" }; console.log([...new Set(Object.values(userMessage))]); 

您可以使用[].some进行迭代,直到找到至少一个好的值为止:

 var date = new Date(); var userMessage = { UserName: "Charlie", LastOnline: date.toDateString(), Name: "Charlie" }; Object.keys(userMessage).some(function(user) { if (userMessage[user] == "Charlie") { console.log("Welcome Charlie!"); return true; } }); 

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/some

只需使用old for循环即可。

 const users = Object.keys(userMessage).map((key) => userMessage[key]); for (let i = 0; i < users.length; i++) { if (users[i] === 'Charlie') { console.log(`Welcome ${users[i]}`); break; } } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM