JS:我如何在数组中使用元素然后去除它

时间:2014-09-07 04:14:19

标签: javascript arrays

我正在尝试制作一个匹配的纸牌游戏并尝试“洗牌”我的牌。以下是我现在所有设置的方法:

卡片的数据是对象

var idea = {
    id: 1,
    english: 'idea',
    pinyin: 'zhǔyì',
    hanyu: '主意'
}

“牌组”是一张包含所有牌的阵列。

var vocabArray = [idea, getOn, need, getOff, beautiful, scenery, sameAlike, because, help, play];

这就是卡片进入我的HTML的方式。

var cardIndexNum = Math.floor(Math.random() * 10);
var cardReturn = vocabArray[cardIndexNum];
document.getElementById('card1').innerHTML = '<h2>' + cardReturn.hanyu + '<br>' + cardReturn.pinyin + '</h2>';

HTML

div class='card' id='card1'>
    JAVASCRIPT PUTS CARD INFO AND H TAGS HERE
</div>

现在我的一些卡片不止一次出现,因为在我使用卡片后它仍然在阵列中。我在使用它们后尝试在卡上使用.splice,但后来我有时会得到一个具有未定义属性的数组元素。

1 个答案:

答案 0 :(得分:0)

由于它是对象数组,因此无法直接在数组上使用拼接以删除元素。

(此示例使用 jQuery

var findAndRemove = function(array,  property, value) {
    $.each(array, function(index, result) {
          if(result[property] == value) {
              array.splice(index, 1);
          }
    }
}

您需要将vocabArrayid以及value作为函数参数传递

findAndRemove(vocabArray, "id", 1);

修改

支持普通的javascript

(未经测试)

var findAndRemove = function(array, value) {
    for(var i=0; i < array.length; i++) {
          if(array[i].id == value) {
              array.splice(i, 1);
          }
    }
}

通过

打电话
findAndRemove(vocabArray, 1);