javascript - 按属性在对象数组中查找重复项的最短方法
问题描述
嗨,我有一个对象数组。每个对象都有一个对象数组。我需要找到在特定属性中具有相同值的(内部)对象的重复项。我弥补在循环内创建一个循环并使用包含。
有没有更短的方法来做到这一点?
// 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
.
推荐阅读
- flutter - 即使我添加了所有必需的设置,Flutter FIrebase Admob 在应用程序启动时崩溃
- xml - 甲骨文 XML 版本
- swift - 更改图像形状后,SwiftUI 无法编译
- c - 使用 C 以并行方式读取二维数组
- python - AttributeError:“成员”对象没有属性“public_flags”
- python - 使用“键盘”在失焦时打开新窗口
- javascript - 在哪里定义数据表以及如何添加/更新行/单元格值?
- c++ - 说 C++ 标准中语法选项的表示中没有隐含的顺序是否正确?
- javascript - 如何显示存储在 javascript 对象中的格式化 html 代码
- python-3.x - 有没有办法用 TypeError 异常缩短这个 json 代码?