为什么我无法删除对象(JavaScript)?

时间:2017-12-08 11:06:42

标签: javascript arrays dom javascript-objects

我有以下代码,我似乎无法找到从thumbs对象中删除mainThumbs的方法。我尝试过splice(0,(mainThumbs.length - 1)),shift,删除thumb [0],似乎没有任何效果。这些函数呈现以下错误'Uncaught TypeError:thumbs.shift()不是函数',而删除thumb [0]只返回整体拇指并且不受影响。

var thumbs      = document.querySelectorAll('.thumbnail');
var mainThumbs  = document.querySelectorAll('.main-thumbnail');

for(var i = 0; i < mainThumbs.length; i++){
    delete thumbs[0];

    console.log(thumbs);
}

这就是mainThumbs的样子:

(3) [div.thumbnail.main-thumbnail, div.thumbnail.main-thumbnail, div.thumbnail.main-thumbnail]

这是控制台输出的拇指:

(12) [div.thumbnail.main-thumbnail, div.thumbnail.main-thumbnail, div.thumbnail.main-thumbnail, div.thumbnail.modal-open, div.thumbnail, div.thumbnail, div.thumbnail, div.thumbnail, div.thumbnail, div.thumbnail, div.thumbnail, div.thumbnail]

并且typeOf thumbs和mainThumbs是对象

任何人都可以解释为什么我似乎无法从拇指对象中删除mainThumbs? 我还想要一个带拼接而不是删除或移位的解决方案,因为我发现它更准确。

2 个答案:

答案 0 :(得分:3)

querySelectorAll('.thumbnail')

  1. 返回集合而不是数组。
  2. 但是你可以从Array对象借用slice方法并创建你自己的真实数组:
  3. var thumbs      = document.querySelectorAll('.thumbnail');
    var mainThumbs  = document.querySelectorAll('.main-thumbnail');
    
    var thumbsArr = Array.prototype.slice.call(thumbs);
    var mainThumbsArr = Array.prototype.slice.call(mainThumbs);
    
    for(var i = 0; i < mainThumbsArr.length; i++){
        delete thumbsArr[0];
        console.log(thumbsArr);
    }
    

答案 1 :(得分:2)

document.querySelectorAll不会返回数组。在某些方面,对象是类似数组的,但不是全部。

但是你解决这个问题的方法过于复杂了。不是获取.thumbnail的所有元素,然后尝试删除.main-thumbnail的元素,而只需使用the negation pseudo-class进行一次搜索:

var non_main_thumbs = document.querySelectorAll('.thumbnail:not(.main-thumbnail)');