使用.find()从数组中删除元素

时间:2017-12-14 10:25:47

标签: javascript arrays

所以,我有一个数组,我想通过TableSource删除一个特定的元素。我应该如何将它用于此目的? 我知道它应该有条件,让我们说

.find()

但我不知道如何将其纳入if(element === selectedItem) { Array.splice(index,1); }

4 个答案:

答案 0 :(得分:5)

您可以使用findIndex而不是find:



bestpoke<-function(Type1, attri){
    data <- read.csv("gen01.csv", colClasses = "character", header=TRUE)
    dx   <- as.data.frame(cbind(data[, 2],   # Name
                                data[, 3],   # Type1
                                data[, 6],   # HP
                                data[, 7],   # Attack
                                data[, 8],   # Defense
                                data[, 9],   # SpecialAtk
                                data[, 10],  # SpecialDef
                                data[, 11]), # Speed
                          stringsAsFactors = FALSE)
    colnames(dx) <- c("Name", "Type1", "HP", "Attack", "Defense", "SpecialAtk","SpecialDef", "Speed")
    ## Check that name and attributes are valid
    if(!Type1 %in% dx[, "Type1"]){
      stop('invalid Type')
    } else if(!attri %in% c("HP", "Attack", "Defense", "SpecialAtk", "SpecialDef", "Speed")){
      stop('invalid attribute')
    } else {
      da <- which(dx[, "Type1"] == Type1)
      db <- dx[da, ]    # extracting data for the called state
      dc <- as.numeric(db[, eval(attri)])
      max_val <- max(dc, na.rm = TRUE)
      result  <- db[, "Name"][which(dc == max_val)]
      output  <- result[order(result)]
    }
    return(output)   }
&#13;
&#13;
&#13;

答案 1 :(得分:4)

Array中移除项目不是find()的目的。

你想要的是Array.filter()

来自MDN Array.prototype.filter

  

filter()方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。

以下是一个例子:

var numbers = [1, 2, 3, 4, 5, 6]

var evenNumbers = numbers.filter(number => {
  // returning something that evaluates to `true` will
  // keep the item in the result Array
  return number % 2 === 0
})

console.log(evenNumbers)

普罗蒂普:

不要本能地尝试将您已经知道的数组帮助函数组合成符合您需要的函数。

相反,请阅读侧边栏中的MDN Array docs,特别是“方法”部分,该部分已包含许多有用的方法。

答案 2 :(得分:1)

我们假设你有条件function,如:

function condition(element) {
    return element === selectedItem;
}

现在,您可以使用find来查找元素的值,如下所示:

var myItem = myArray.find(condition);

然后

myArray.splice(myArray.indexOf(myItem), 1);

但是,如果您的数组可能有多个要删除的匹配项,那么

var myItem;
while ((myItem = myArray.find(condition)) !== undefined) {
    myArray.splice(myArray.indexOf(myItem), 1);
}

答案 3 :(得分:0)

要查找索引,您需要indexOf而不是find,以便您可以在此基础上执行进一步的操作。