$.inArray()循环问题的更好语法

Better Syntax for $.inArray() Loop Issue

本文关键字:更好 语法 问题 循环 inArray      更新时间:2023-09-26

我正在尝试使用$.inArray的循环。基本上,我有要循环的信息,我需要获取一段信息并将其添加到数组中。如果该区域中已经存在该信息(有重复的,三个相同,四个相同,等等,一直到同一数据的12个实例),我会在数据的末尾添加一个数字来确定它是哪个重复

var subject_name_original = subject_name;    
if ($.inArray(subject_name, subject_array) !== -1){
    subject_name = subject_name_original + '2';
    if ($.inArray(subject_name, subject_array) !== -1){
        subject_name = subject_name_original + '3';
        if ($.inArray(subject_name, subject_array) !== -1){
            subject_name = subject_name_original + '4';
        }
     }
}
subject_array.push(subject_name);

这一直循环到12个实例,所以你可以看到它的编写方式不是很有效。我想使用一个计数器变量来增加附加的数字,但不知道如何在这样的循环中使用inArray。

有什么想法吗?谢谢你的帮助!

您可以这样做:

var subjectCounter = 1;
var originalSubjectName = subjectName;
while (subjectArray.indexOf(subjectName) !== -1) { // $.inArray is the same as this
    subjectCounter += 1;
    subjectName = originalSubjectName + subjectCounter;
}
subjectArray.push(subjectName);

如果subject_array没有排序,请先对其进行排序。那么你应该只需要访问每个项目一次。

var sorted = subject_array.sort();
var subject_counter = 1;
var subject_name_original = subject_name;
for (var i = sorted.length - 1; i >= 0; i--) {
  if (sorted[i] == subject_name) {
    subject_counter++;
    subject_name = subject_name_original + subject_counter;
  };
};
subject_array.push(subject_name);

这个应该有效(未测试):

var i = 1;
var subject_name_original = subject_name;
while (++i < 13) { // at first loop, i = 2
    if ($.inArray(subject_name, subject_array) !== -1) {
        subject_name = subject_name_original + i;
    } else {
        // $.inArray() failed beyound the second loop :
        if (i > 3) {
            subject_name = subject_name_original + (i - 1);
            subject_array.push(subject_name);
        }
        // $.inArray() failed at second loop (i = 3) :
        else if (i > 2) {
            subject_name = subject_name_original;
            subject_array.push(subject_name);
        }
        // Does nothing if $.inArray() failed at first loop.
        break;
    }
}