Javascript findIndex提供递归结果



我有一个表,每个单元格中有两个下拉列表,当用户更改默认值时,我要记录更改,将它们传递给视图(使用确认按钮),并将它们记录在数据库中。

我使用changed_element来记录更改的元素(是一个列表:类型、行、列),并使用changed_value来记录新值。如果用户多次更改同一下拉列表,我会诅咒只记录最后一个值,所以changed_element不允许重复。

这是我的代码:

...
var changed_element=[]
var changed_value=[];
var index=-1
document.getElementById('tabella').addEventListener('change', function(event){
var elem = event.target; //detect the element changed
var element=[elem[elem.value].getAttribute('type'), 
elem[elem.value].getAttribute('primo'), 
elem[elem.value].getAttribute('secondo')] //records the coordinates (strings, not numbers)
index=changed_element.findIndex(element_exist); //controls if already exist
console.log('index', index)
console.log('element', element)
if (index==-1) { //new element
changed_element.push(element);
changed_value.push(elem[elem.value].text);
} else { //already exist, so update the value
changed_value[index]=elem[elem.value].text;
};
function element_exist(array) {
console.log('array', array)
return array==element; //return the index of the element if already in list or -1
};
});

但它不起作用。。。索引总是-1

编辑:现在我明白了下面发生的事情:该函数对元素调用一次,直到它找到一个双击/编辑

同样在第一次更改console.log时给出:

index -1
element Array [ "whenever", "something", "someotherthing" ]

在第二次更改时(在同一下拉菜单上)给出:

array Array [ "whenever", "something", "someotherthing" ]
index -1 
element Array [ "whenever", "something", "someotherthing" ]

但是数组和元素是相同的,所以索引应该是0…在第三次更改时(在同一下拉菜单上)给出:

array Array [ "whenever", "something", "someotherthing" ]
array Array [ "whenever", "something", "someotherthing" ] //it add one more and so on
index -1
element Array [ "whenever", "something", "someotherthing" ]

为什么它调用两次函数element_exist

现在我更改另一个下拉列表,它给出:

array Array [ "whenever", "something", "someotherthing" ]
array Array [ "whenever", "something", "someotherthing" ]
array Array [ "whenever", "something", "someotherthing" ]
index -1
element Array [ "whenever new", "something new", "someotherthing new" ]

所以元素是不同的,索引是合法的-1,但函数element_exist被调用了三次。

所以,这里是我的解决方案:

...
var changed_element=[]
var changed_value=[];
document.getElementById('tabella').addEventListener('change', function(event){
var elem = event.target; //detect the element changed
var element=[elem[elem.value].getAttribute('type'), 
elem[elem.value].getAttribute('primo'), 
elem[elem.value].getAttribute('secondo')] //records the coordinates (strings, not numbers)
var index=element_exist(changed_element, element); //controls if already exist
if (index==-1) { //new element
changed_element.push(element);
changed_value.push(elem[elem.value].text);
} else { //already exist, so update the value
changed_value[index]=elem[elem.value].text;
};
function element_exist(changed_element, element) {
for (i=0; i<changed_element.length; i++) {
if (element[0]==changed_element[i][0] && element[1]==changed_element[i][1] && element[2]==changed_element[i][2]) {
return i;
};
};
return -1
};
};

它不使用findIndex,这更好,因为许多浏览器都不支持它。不幸的是,它只在len(element)=3的情况下工作,但对我来说,它还可以

最新更新