我有以下JavaScript,其中有一些列表:
var deleteLinks = $(".remove-button .remove-from-cart");
deleteLinks.on('click', function(ev){
ev.preventDefault();
console.log("registered: " + deleteLinks);
var currentHTML = $('.product');
var currentText = $('.product .product-details .name-header');
var newHTML ;
$.ajax({
url: this.href,
type: "GET",
dataType: "html",
success: function(data) {
newHTML = $(data).find('.product .product-details .name-header');
for(i = 0; i < newHTML.length; i++){
console.log("new: " + newHTML[i].innerText);
console.log("old: " + currentText[i].innerText);
}
}
});
});
变量currentHTML
包含一个div数组,这些div是一个容器。currentText
包含每个容器名称的数组。AJAX响应(newHTML
)中收到的变量包含一个名称数组。此数组在一些用户交互后更新。currentText
变量的一个或多个条目可能丢失,我希望找到它们的索引,以便可以从容器(currentHTML
)中删除它们。
有人能帮我找到currentText
和检索到的数据(newHTML
)之间缺失元素的索引吗?
发布于 2018-10-03 02:49:34
假设您在数组A
中有唯一的元素,并且在数组B
中只有一个出现。我们可以只使用set来添加数组A
的所有元素,并在迭代数组B
时从set中删除这些元素。使用findIndex
查找集合中剩余的元素。
const a = [1,2,3,4,5];
const b = [2,1,5,4];
let set = new Set();
a.forEach(ele => set.add(ele));
b.forEach(ele => {
if(set.has(ele)){
set.remove(ele);
}
});
let res = [];
for(let s of set) {
if(a.findIndex(s) !== -1) {
res.push({
arr: a,
pos: a.findeIndex(s)
});
}else {
res.push({
arr: b,
pos: b.findeIndex(s)
});
}
}
res
数组包含索引和元素所在的数组。
发布于 2018-10-03 03:15:57
如果您可以访问lodash,您可以使用_.difference在一行中解决此问题。
var a = ['a', 'b', 'c'],
b = ['b'],
result = [];
_.difference(a, b).forEach(function(t) {result.push(a.indexOf(t))});
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
发布于 2018-10-03 05:06:16
正如我从您的代码中看到的,您需要比较两个对象的innerText,并找到缺少的元素的索引。
var missing_indices = [];
for(var i=0;i<currentText.length;i++){
var found = false;
for(var j=0;j<newHTML.length;j++){
if(currentText[i].innerText == newHTML[j].innerText){
found = true;
break;
}
}
if(!found){
missing_indices.push(i);
}
}
然后使用missing_indices从currentHTML中删除缺少的元素
https://stackoverflow.com/questions/52613907
复制相似问题