我正在尝试检查Array中的对象之一的ID是否为2(如果这样),请删除该对象。 list.filter(e => e.id === 2)
返回[ { name: 'bread', id: 2 } ]
,这是我要删除的部分,但是如果我通过执行if(list.indexOf(list.filter(e => e.id === 2)) != -1)
检查它是否在数组中,则返回-1,表示它不在列表中。任何帮助将不胜感激!
var list = new Array();
list.push({name: 'apple', id: 1})
list.push({name: 'bread', id: 2})
console.log(list.filter(e => e.id === 2));
console.log(list);
if(list.indexOf(list.filter(e => e.id === 2)) != -1) {
list.splice(list.indexOf(list.filter(e => e.name === 2)));
console.log(list);
} else {
console.log('The id of 2 has not been found');
}
答案 0 :(得分:1)
然后仅使用!==
代替===
。
但是您可以使用find
方法。
var elem = list.find(e => e.id === 2);
if(elem)
list = list.filter(e => e.id !== 2);
else
console.log('The id of 2 has not been found');
答案 1 :(得分:0)
您正在使用过滤器,就像过滤掉元素一样,而实际上保留了适合条件的元素。将条件更改为e.id !== 2
,它会保留所有 ids不等于2 的元素:
var list = new Array();
list.push({name: 'apple', id: 1})
list.push({name: 'bread', id: 2})
list.push({name: 'milk', id: 3})
list.push({name: 'butter', id: 4})
console.log(list.filter(e => e.id !== 2));
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:0)
您需要颠倒filter
谓词函数的逻辑。
list.filter(e => e.id !== 2);
filter
仅返回与谓词匹配的项目-在您的情况下,它将仅返回ID为2的一个元素的列表。
答案 3 :(得分:0)
使用<html>
<head>
<title>Row Click</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
function test(){
alert('test');
}
$(document).ready(function(){
var row='<tr onclick="test()"><td >Value 4</td><td>Value 5</td><td>Value 6</td></tr>';
$("#myTable").append(row);
});
</script>
</head>
<table id="myTable" >
<th>Column 1</th><th>Column 2</th><th>Column 3</th>
<tr onclick="test()">
<td >Value 1</td>
<td>Value 2</td>
<td>Value 3</td>
</tr>
</table>
</html>
测试时,您正在搜索具有找到的元素的数组。
os.system('wpscan -u'+wpsite+'--enumerate u')
返回带有结果的数组。您应该使用indexOf
来返回单个元素:
filter
答案 4 :(得分:0)
使用list.filter(e => e.name === 2)时。它将返回一个 array 包含对象,而不是对象本身。因此它将返回-1。您可以使用传播语法从包含它的数组中提取对象:
list.indexOf(...list.filter(e => e.id === 2))
答案 5 :(得分:0)
Installing laravel/laravel (v5.6.21)
- Installing laravel/laravel (v5.6.21): Loading from cache
Created project in laravel
@php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 70 installs, 0 updates, 0 removals
- Installing vlucas/phpdotenv (v2.5.0): Downloading (100%)
[ErrorException]
copy(/Users/mohammadreza/.composer/cache/files/vlucas/phpdotenv/860e02c1487d4eaac63d29a77c5fa31c2739df62.zip): failed to open stream: Permission denied
将不起作用,因为您将搜索对象,并且JavaScript中的对象比较非常棘手(需要使用自定义评估程序来检查相同性)。好消息是您可能不需要它。
如评论和其他地方所述,过滤器的行为与您想要的相反。将比较运算符从indexOf
更改为===
是解决该问题的一种方法。
在下面的代码中,我包括了一些其他可能会有价值的东西,例如:
!==
Array.of()
){ foo } === {'foo': foo}
)执行系列,尤其是避免大括号,
作为函数参数的rest运算符
...