我有一个表单,用户可以在其中添加"行"的项目。让我们说每一行都有一个"名称"和" slug"。这是一个对象数组的输出,如下所示:
[
{
"name": "Bananas",
"slug": "bananas"
},{
"name": "Bananas",
"slug": "bananas"
},{
"name": "Silver Spoons",
"slug": "silver_spoons"
},{
"name": "Silver Spoons",
"slug": "silver_spoons"
}
]
现在,给定用户输入此内容。 我想为每个重复'slug'
找到它的第一次出现的索引,以便我可以在该行上显示验证错误。我知道我可以很容易地_.pluck
ids,但我仍然不确定之后的最佳方法是什么。任何帮助将不胜感激。
答案 0 :(得分:0)
您可以使用jQuery inArray
var items = [
{
"name": "Bananas",
"slug": "bananas"
},{
"name": "Bananas",
"slug": "bananas"
},{
"name": "Silver Spoons",
"slug": "silver_spoons"
},{
"name": "Silver Spoons",
"slug": "silver_spoons"
}
];
var names = [];
var duplicates = [];
for(var i = 0; i < items.length; i++ ) {
var value = items[i].name;
if ($.inArray(value, names) > -1) {
duplicates.push(i);
} else {
names.push(value);
}
}
alert(names.toString());
alert(duplicates.toString());
示例:jsFiddle
答案 1 :(得分:0)
扩展Margus&#39;回答,你可以这样做:
循环遍历存储hashmap中第一次出现的slug索引的数组。
然后,如果您遇到同一个slug的另一个匹配项,请将第一个匹配项的索引添加到数组中。
function getFirstOccurences(arr) {
var items = {};
var alreadyExist = [];
arr.forEach(function(item, index) {
if(items.hasOwnProperty(item.slug)) {
alreadyExist.push(items[item.slug]);
}
else {
items[item.slug] = index;
}
});
return alreadyExist;
}
修改:修复现有项目并添加fiddle here