是否有一种方法可以使用 Lodash.js 检查 JavaScript 中字典对象之间的部分唯一性?

问题描述 投票:0回答:1

我有一个 DataTable.js 表,我想指定哪些行具有匹配数据,以便我可以用红色勾勒出它们。我将行数据转换成字典来比较它们是否相等。 Lodash.js 是否有像 uniq 这样的方法来测试部分唯一性? DataTables.js 有一个行选择器方法,如果我可以从部分重复的字典中提取 rowIndex 值,我可以使用它。

rowDataList = [
    {
        "a": 1,
        "b": 2,
        "rowIndex": 1,
    },
    {
        "a": 1,
        "b": 2,
        "rowIndex": 2,
    },
]

在之前的一篇文章中,我了解到我可以确定一个字典列表是否有一对重复的字典,但这并没有指定哪些行是相等的。

// Compares all key value pairs of the dictionaries in the list
if (_.uniqWith(rowDataList , _.isEqual).length !== rowDataList .length) {
    return "has duplicate row";
} else {
    return "no duplicate rows";
}

我可以创建一个重复项列表,并使用 jQuery 勾勒出与列表中的值匹配的表行 DOM 元素。

javascript jquery dictionary datatables lodash
1个回答
0
投票

您可以使用

_.uniqBy
获得基于多个属性的独特对象。现在您可以比较结果中的 2 个长度

const rowDataList = [
    {
        "a": 1,
        "b": 2,
        "rowIndex": 1,
    },
    {
        "a": 1,
        "b": 2,
        "rowIndex": 2,
    },
    {
        "a": 2,
        "b": 2,
        "rowIndex": 2,
    },
]

const fields = ['a','b']

const uniqByMultipleFields = _.uniqBy(rowDataList, e => fields.reduce((acc,curr) => acc + e[curr],''))

const thisAlsoWorks = _.uniqBy(rowDataList, e => fields.map(f => e[f]).join(''))

console.log(uniqByMultipleFields)
console.log(thisAlsoWorks)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>

© www.soinside.com 2019 - 2024. All rights reserved.