Javascript 对于数组中的每个副本,查找第一个副本的索引
我有一个表单,用户可以在其中添加“行”项。假设每行有一个“名称”和“slug”。其输出是一个对象数组,如下所示:Javascript 对于数组中的每个副本,查找第一个副本的索引,javascript,arrays,duplicates,Javascript,Arrays,Duplicates,我有一个表单,用户可以在其中添加“行”项。假设每行有一个“名称”和“slug”。其输出是一个对象数组,如下所示: [ { "name": "Bananas", "slug": "bananas" },{ "name": "Bananas", "slug": "bananas" },{ "name": "Silver Spoons", "slug": "silver_spoons" },{ "name": "Silver Spoons", "slug": "silver_spoo
[
{
"name": "Bananas",
"slug": "bananas"
},{
"name": "Bananas",
"slug": "bananas"
},{
"name": "Silver Spoons",
"slug": "silver_spoons"
},{
"name": "Silver Spoons",
"slug": "silver_spoons"
}
]
现在,给定一个用户输入这个我想为每个重复的
“slug”
,找到其第一次出现的索引,以便在该行上显示验证错误。我知道我可以很容易地。
取出ID,但我仍然不确定之后最好的方法是什么。非常感谢您的帮助。您可以使用jQueryinArray
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());
var项目=[
{
“名称”:“香蕉”,
“鼻涕虫”:“香蕉”
},{
“名称”:“香蕉”,
“鼻涕虫”:“香蕉”
},{
“名称”:“银匙”,
“鼻涕虫”:“银匙”
},{
“名称”:“银匙”,
“鼻涕虫”:“银匙”
}
];
变量名称=[];
重复变量=[];
对于(变量i=0;i-1){
重复。推送(i);
}否则{
名称。推送(值);
}
}
警报(names.toString());
警报(重复的.toString());
示例:扩展Margus的答案,您可以执行以下操作: 循环遍历存储哈希映射中第一次出现的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;
}
编辑:修复了对现有项目的检查并添加了我不太确定这将如何得到我想要的结果。我在这里期望的是第一个副本的索引数组。在上面的例子中,我期望[0,2]。你能详细说明一下这将如何帮助我达到目的吗?请注意,这将把所有重复的索引都排成一列。谢谢,做得很好。规格改变了,所以我现在必须在所有的副本上显示错误,除了第一个(叹气)。修改了一个位以使用下划线的
。每个(他们声称在最新版本中更快),并允许将密钥作为参数输入。结果如下: