【问题标题】:JavaScript Object loop - Filter and show duplicates onceJavaScript 对象循环 - 过滤并显示重复项一次
【发布时间】:2018-11-25 23:40:19
【问题描述】:

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

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!");
   }
});

但是这很好用,但我只希望文档写“欢迎查理!”一次。用户可能会有两次相同的字段,我如何将其限制为一次?

很快这个函数就会被一个 angularJS ng-repeat 包裹起来。也许它可以用过滤器做一次?

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

谢谢。

【问题讨论】:

  • 是的,但是如果其中一条消息有回复,我只会显示一次模态而不是多次。我还没有创建它,并想从不同的基础开始。

标签: javascript loops object


【解决方案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))]);

【讨论】:

【解决方案2】:

您可以使用[].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

【讨论】:

    【解决方案3】:

    只使用旧的 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;
      }
    }

    【讨论】:

      猜你喜欢
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      • 2016-06-22
      • 2014-06-18
      • 2013-04-01
      • 1970-01-01
      相关资源
      最近更新 更多