Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对于数组中的每个副本,查找第一个副本的索引_Javascript_Arrays_Duplicates - Fatal编程技术网

Javascript 对于数组中的每个副本,查找第一个副本的索引

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

我有一个表单,用户可以在其中添加“行”项。假设每行有一个“名称”和“slug”。其输出是一个对象数组,如下所示:

[
 {
 "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]。你能详细说明一下这将如何帮助我达到目的吗?请注意,这将把所有重复的索引都排成一列。谢谢,做得很好。规格改变了,所以我现在必须在所有的副本上显示错误,除了第一个(叹气)。修改了一个位以使用下划线的
。每个
(他们声称在最新版本中更快),并允许将密钥作为参数输入。结果如下: