javascript - 比较一个 JavaScript 对象数组中的值

标签 javascript arrays object

我有一个像这样的对象数组:

[{ value: 40,
  username: 'Name 1',
  id: 'high'
},
{ value: 30,
  username: 'Name 2',
  id: 'low',
},
{ value: 60,
  username: 'Name 1',
  id: 'low',
},
{ value: 50,
  username: 'Name 2',
  id: 'high'
}]

我想比较具有相同 username 键的对象,并在对象具有属性 id: low 及其 的情况下返回 false高于 id 设置为 high 的任何相应对象。

因此,对于此对象,将返回 false,因为第三个对象的 id 为 low,并且它的值比具有相同用户名的对应对象更高high 在其 id 中。

目前我正在将数组过滤为两个单独的数组,如下所示。

    const higherTest = test.filter(item => item.id === 'high');
    const lowerTest = test.filter(item => item.id === 'low');

然后使用嵌套 for 循环比较两者,但这似乎过多,我想知道是否有更干净的方法?

最佳答案

您可以使用已访问名称的哈希表并存储低值和高值。如果找到一对,请检查值并返回检查结果。

此方法使用短路并返回第一个找到的低>高条件。

var data = [{ value: 40, username: 'Name 1', id: 'high' }, { value: 30, username: 'Name 2', id: 'low' }, { value: 60, username: 'Name 1', id: 'low' }, { value: 50, username: 'Name 2', id: 'high' }],
    result = !data.some((m => ({ value, username, id }) => {
        const user = m[username] = m[username] || {};
        user[id] = value;
        return 'high' in user && 'low' in user && user.low > user.high;
    })({}));

console.log(result);

关于javascript - 比较一个 JavaScript 对象数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60619645/

相关文章:

javascript - 如何通过将用户输入与其键匹配来显示对象的值?

javascript - 如何在 "Simplest jQuery Slideshow"上添加导航箭头?

JavaScript 实时计算

javascript - 从 JSON 子对象计算总和

ruby-on-rails - Mongoid - 阵列管理?插入唯一值,如果存在则删除值?

jquery - 使用 $(array).each 迭代数组

javascript - 使用变量引用 javascript 数组

c++ - 使用二叉搜索树查找数组中第k个最小的元素

c# - "object as type"和 "((type)object)"有什么区别?

java - 如何使用输入来创建对象