防止已插入数组的元素被重新插入

时间:2016-11-07 17:44:40

标签: javascript arrays

我遇到了将值推入数组的问题。它最初工作正常,但是如果我重新单击已经在数组中的元素,它会将它移动(推送)到数组的末尾。有办法解决这个问题吗?

这是我的代码:

function unique(list) {
    var result = [];

    $.each(list, function(i, e) {
        var txt = $.trim(e);

        if ($.inArray(txt, result) == -1) {
            // pushing the element onto the end
            // and returning it
            // sorting is not the issue
            result.push(e);
        } else {
            return;
        }
    });

    // sort 
    result.sort();

    return result.join(", ");
}

一个例子是我点击a.php然后点击b.php并且工作正常,a.php在b.php之前排序但是如果我再次点击a.php,b.php会被移动到阵列的前面。有没有办法检查这个,所以它不会发生?

谢谢!

2 个答案:

答案 0 :(得分:0)

这个问题的答案比我给出的答案要强。但我认为你正在寻找一个直接的,或多或少天真的答案(例如,你并不想重新设计ES6,你不会引入另一个图书馆等)。

您可以使用Array.prototype.find。

var arr = [ 1, 2, 3 ];
function insertIfNoDupes ( num ) {
    if ( ! arr.find ( num ) ) {
      arr.push ( num );
    } else {
      console.log ( 'Value already exists in array' );
    }
} 

如果找不到值,则查找将返回undefined。

答案 1 :(得分:0)

您可以为元素添加自定义值。例如,我有4个按钮

int data;
void* worker(void* arg __attribute__((unused))) {
   pthread_mutex_t m;
   pthread_mutex_init(&m, NULL);
   for (int i = 0; i < N; i++) {
      pthread_mutex_lock(&m);
      data++;
      pthread_mutex_unlock(&m);
   }
   pthread_mutex_destroy(&m);
   return NULL;
}

和一个数组变量

int data;
pthread_mutex_t m;
void* worker(void* arg __attribute__((unused))) {
   for (int i = 0; i < N; i++) {
      pthread_mutex_lock(&m);
      data++;
      pthread_mutex_unlock(&m);
   }
   return NULL;
}
// ...
pthread_mutex_init(&m, NULL);
// ...
pthread_mutex_destroy(&m);
// ..

如果未定义值,我只需要为元素添加自定义值

<input id="btn1" type="button" value="Click me" onclick="addToArr(this)"><br/>
<input id="btn2" type="button" value="Click me" onclick="addToArr(this)"><br/>
<input id="btn3" type="button" value="Click me" onclick="addToArr(this)"><br/>
<input id="btn4" type="button" value="Click me" onclick="addToArr(this)"><br/>