Javascript 为什么splice和/或findIndex不允许更改数组/索引0的第一个元素?
我的目标是创建一个函数,该函数将获取一个文本值,循环遍历一个对象数组,并删除匹配的元素。但是,我发现如果元素是第一个实例(索引0),那么这段代码不会删除它,并且在它删除的实例中,只删除第一个匹配值,而不会删除任何其他值Javascript 为什么splice和/或findIndex不允许更改数组/索引0的第一个元素?,javascript,arrays,javascript-objects,splice,Javascript,Arrays,Javascript Objects,Splice,我的目标是创建一个函数,该函数将获取一个文本值,循环遍历一个对象数组,并删除匹配的元素。但是,我发现如果元素是第一个实例(索引0),那么这段代码不会删除它,并且在它删除的实例中,只删除第一个匹配值,而不会删除任何其他值 const cats = [{ name: `catOne`, color: `orange` }, { name: `catTwo`, color: `Grey-white` }, { name: `catThree`, colo
const cats = [{
name: `catOne`,
color: `orange`
}, {
name: `catTwo`,
color: `Grey-white`
}, {
name: `catThree`,
color: `Grey-white`
}]
const deleteColor = function (arrayOfObjects, clr){
const index = arrayOfObjects.findIndex(function(e, i){
if (e.color.toLowerCase() === clr.toLowerCase()){
return i;
}
})
if (index >= -1 ){
arrayOfObjects.splice(index,1)
}
}
deleteColor(cats,'grey-white')
cats.forEach(function(e, i) {
console.log(e, i) })
输出:
{ name: 'catOne', color: 'orange' } 0
{ name: 'catThree', color: 'Grey-white' } 1
但如果我将文本值输入更改为“橙色”,则输出为:
{ name: 'catOne', color: 'orange' } 0
{ name: 'catTwo', color: 'Grey-white' } 1
{ name: 'catThree', color: 'Grey-white' } 2
如果我更改If(index>=-1)
则输出与输入'grey-white'
作为文本值相同
有人能解释为什么第一个元素即使是索引0也没有被删除吗?为什么索引-1会导致删除索引1
我试着四处寻找这个,但找不到我要找的东西。我才刚刚开始学习香草JS。感谢您的帮助。该方法的工作方式是返回回调函数为其返回值的第一个索引。换句话说,无论何时调用函数,它都应该返回true
或false
,而不是它出现的索引。当从函数返回true
时,.findIndex()
将生成您为返回的true
项的索引。在您的情况下,回调函数隐式返回未定义的
(这是一个值)或对象出现的索引。对于“orange”
,此对象显示在索引0
,因此返回0
。零被认为是一个伪值,因此findIndex将继续搜索。如果未找到任何值,它将返回-1
(这是输入“orange”时发生的情况,因此。splice(-1,1)
将删除数组中的最后一个元素)
const cat=[{
名称:`catOne`,
颜色:橙色`
}, {
姓名:`catTwo`,
颜色:灰白色`
}, {
姓名:`catThree`,
颜色:灰白色`
}]
常量deleteColor=函数(arrayOfObjects,clr){
常量索引=arrayOfObjects.findIndex(函数(e,i){
返回e.color.toLowerCase()==clr.toLowerCase();
});
如果(索引>-1){//找到了检查对象(使用>而不是>=)
阵列对象拼接(索引1);
}
}
deleteColor(猫,“橙色”)
控制台日志(CAT)代码>