Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么splice和/或findIndex不允许更改数组/索引0的第一个元素?_Javascript_Arrays_Javascript Objects_Splice - Fatal编程技术网

Javascript 为什么splice和/或findIndex不允许更改数组/索引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

我的目标是创建一个函数,该函数将获取一个文本值,循环遍历一个对象数组,并删除匹配的元素。但是,我发现如果元素是第一个实例(索引0),那么这段代码不会删除它,并且在它删除的实例中,只删除第一个匹配值,而不会删除任何其他值

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)