javascript - 按属性在对象数组中查找重复项的最短方法

标签 javascript

您好,我有一个对象数组。每个对象都有一个对象数组。我需要找到在特定属性中具有相同值的(内部)对象的副本。我弥补了在循环内创建一个循环并使用 include。
有更短的方法吗?

    // Verify that there are no duplicate device names.
    const streamItemNames = [];
    for (let i = 0, length1 = validateStreamItemsResults.streamWebSockets; i < length1; i++) {

        const streamItems = validateStreamItemsResults.streamWebSockets[i].streamItems;

        for (let y = 0, length2 = streamItems.length; y < length2; y++) {

            const streamItem = streamItems[i];
            const streamItemNameLower = streamItem.streamItemName.trim().toLowerCase();

            if (streamItemNames.includes(streamItemNameLower)) {
                validateStreamItemsResults.errorMessage = `Duplicate stream items found with the name: ${streamItemNameLower}`;
                return validateStreamItemsResults;
            } else {
                streamItemNames.push(streamItemNameLower);
            }
        }
    }

更新:
对象的结构如下,例如:
(如果存在重复的“streamItemName”,我需要确定是真还是假 - 在这个例子中 - 是真)。

const childArray1 = [ { streamItemName: 'Name1' }, { streamItemName: 'Name2' }, { streamItemName: 'Name3' }, { streamItemName: 'Name4' }];
const childArray2 = [ { streamItemName: 'Name5' }, { streamItemName: 'Name6' }, { streamItemName: 'Name7' }, { streamItemName: 'Name1' }];
const parentArray = [childArray1, childArray2];

最佳答案

如果您正在寻找更清晰、更短的代码,您可以使用 flatMap 将每个 streamItemName 提取到一个数组中,然后使用 .find 查找是否有任何重复项:

const streamItemNames = validateStreamItemsResults.streamWebSockets.flatMap(
  socket => socket.streamItems.map(
    item => item.streamItemName.trim().toLowerCase()
  )
);
const dupe = streamItemNames.find((name, i, arr) => arr.slice(i + 1).includes(name));
if (dupe) {
  validateStreamItemsResults.errorMessage = `Duplicate stream items found with the name: ${dupe}`;
  return validateStreamItemsResults;
}

如果您不需要知道重复名称,您可以通过创建一个 Set 并将其 .size 与数组的 length 进行比较来缩短它

关于javascript - 按属性在对象数组中查找重复项的最短方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54921197/

相关文章:

javascript - 如何添加外部链接到 react-bootstrap Navbar?

javascript - AngularJS 中的 jQuery.ajaxStart 等价物 | AngularJS 中的 Ajax 事件处理程序

javascript - 使用 moment.js 倒计时到特定的日期和时间

javascript - 如何将 mysql 行发送到客户端

javascript - 以下 Javascript 语句有什么问题?

javascript - 多次点击div不会刷新: Only refreshes once

JavaScript 方法和副本

javascript - 在 Mocha HTML 报告器中禁用堆栈跟踪

javascript - 如何使用 jQuery 选择某个元素的所有子级(任何级别)和父级

javascript - 防止固定 Div 覆盖其他 Div