所以,我有一个数组,我想通过TableSource
删除一个特定的元素。我应该如何将它用于此目的?
我知道它应该有条件,让我们说
.find()
但我不知道如何将其纳入if(element === selectedItem)
{
Array.splice(index,1);
}
。
答案 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;
答案 1 :(得分:4)
从Array
中移除项目不是find()
的目的。
你想要的是Array.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
,以便您可以在此基础上执行进一步的操作。