嗨,我有一系列对象。每个对象都有一个对象数组。我需要找到在特定属性中具有相同值的(内部)对象的重复项。我在循环内创建了一个循环并使用 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);
}
}
}
UPDATE:
对象的结构如下,例如:
(我需要确定是否存在重复的“streamItemName” - 在此示例中 - true )。
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;
}
如果你不这样做need要知道重复的名称,您可以通过创建一个 Set 并比较其名称来缩短它.size
针对数组的length
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)