我有一个 UI,其中有一个 HTML 表格,我们可以在其中添加动态行和列(angularjs)
该表有 2 个静态列 ID 和说明,其余列是动态列,用户必须在其中添加一列或多列。(单击按钮) 单击“保存”按钮后,我想验证用户是否添加了唯一的动态列。
下面的变量保存行数组,如下所示:
$scope.myTable.Rows
下面是用户仅添加一列和两行时生成的数组。这里 id 和 description 是静态列,而“0”是添加的动态列。
{0: "1111", description: "desc1", id: "1111"}
{0: "2222", description: "desc2", id: "2222"}
添加 3 个动态列、3 行时的另一个示例:
{0: "a1", 1: "a2", 2: "a3", description: "desc1", id: "1111"}
{0: "a5", 1: "a6", 2: "a7", description: "desc2", id: "2222"}
{0: "a9", 1: "a10", 2: "a11", description: "desc3", id: "3333"}
我想检查上面的数组仅在动态列的组合中是否唯一。即根据上面的数组,动态列 0、1、2 的设置值不应在数组中的任何其他行中重复。
因此下面的数组集不应通过验证:
{0: "a1", 1: "a2", 2: "a3", description: "desc1", id: "1111"}
{0: "a5", 1: "a6", 2: "a7", description: "desc2", id: "2222"}
{0: "a1", 1: "a2", 2: "a3", description: "desc3", id: "3333"}
如您所见,上面的第三行与第一行类似。我不想考虑列“id”和“description”
虽然下面仍然是独特的:
{0: "a1", 1: "a2", 2: "a3", description: "desc1", id: "1111"}
{0: "a5", 1: "a6", 2: "a7", description: "desc2", id: "2222"}
{0: "a1", 1: "a2", 2: "a9", description: "desc3", id: "3333"}
我尝试在以下位置查看几篇文章: How can I check if the array of objects have duplicate property values?
但大多数情况下都是查看单个属性并查看是否有重复但不是组合集合。
我希望我已经清楚地解释了我的要求。如果您需要更多信息,请告诉我。
--更新--
我尝试过:
let array = [
{0: "a1", 1: "a2", 2: "a3", description: "desc1", id: "1111"},
{0: "a5", 1: "a6", 2: "a7", description: "desc2", id: "2222"},
{0: "a1", 1: "a2", 2: "a3", description: "desc3", id: "3333"}];
let jsonRows = JSON.parse(JSON.stringify(array));
var valueArr = jsonRows.map(function(item){ return item."0" });
//above gives error: Uncaught SyntaxError: Unexpected string
var isDuplicate = valueArr.some(function(item, idx){
return valueArr.indexOf(item) != idx
});
console.log(jsonRows);
最佳答案
这就是我认为我们可以在这里做的非常简单的事情,创建一个映射,其中键作为每行每个动态属性的值。如果已经存在找到重复项的属性,则获取每一行并添加到 map 。
我使用 ||
作为分隔符组合每个值以创建唯一键,使用不会成为动态属性值的唯一键。
function isUniqueData(data) {
let map = {}, isUnique = true;
data.filter(function(item, index) {
let prop = "";
for(var key in item) {
if(key != "description" && key != "id") {
prop += item[key] + "||";
}
}
if(map[prop]) {
isUnique = false;
} else {
map[prop] = item;
}
});
return isUnique;
}
var data1 = [
{0: "a1", 1: "a2", 2: "a3", description: "desc1", id: "1111"},
{0: "a5", 1: "a6", 2: "a7", description: "desc2", id: "2222"},
{0: "a5", 1: "a6", 2: "a7", description: "desc2", id: "2222"},
{0: "a1", 1: "a2", 2: "a9", description: "desc3", id: "3333"}
];
console.log(isUniqueData(data1))
var data2 = [
{0: "a1", 1: "a2", description: "desc1", id: "1111"},
{0: "a5", 1: "a6", description: "desc2", id: "2222"},
{0: "a1", 1: "a4", description: "desc3", id: "3333"}
];
console.log(isUniqueData(data2))
关于javascript - 在对象数组中查找重复的设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52277065/