我遇到了将值推入数组的问题。它最初工作正常,但是如果我重新单击已经在数组中的元素,它会将它移动(推送)到数组的末尾。有办法解决这个问题吗?
这是我的代码:
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会被移动到阵列的前面。有没有办法检查这个,所以它不会发生?
谢谢!
答案 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/>