我有一些类似这样的代码:
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/
谢谢。
答案 0 :(得分:0)
一种选择是使用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))]);
答案 1 :(得分:0)
您可以使用[].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/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some
答案 2 :(得分:0)
只需使用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;
}
}