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

时间:2018-11-25 23:40:19

标签: javascript loops object

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

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/

谢谢。

3 个答案:

答案 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;
  }
}