我有一个对象数组
a = [
{name:'java'},
{name:'ruby'},
{name:'javascript'},
{name:'meteor'}
];
我希望找到一个键/值,从源中删除它并使用下划线将其分配给另一个变量。我尝试了_.find, _.findWhere
,但他们没有删除找到的项目。
问题是找到一个项目,删除它并使用下划线返回删除的项目。
答案 0 :(得分:1)
从documentation开始,我们有_.findIndex
。
findIndex _.findIndex(array,predicate,[context])
与.indexOf类似,返回谓词真值测试通过的第一个索引;否则返回-1。
获得相关项目的索引后,您可以splice
该索引处的数组,并从Array.prototype.splice
返回的length-1数组中检索第0个索引项。
var sourceArray = [
{name:'java'},
{name:'ruby'},
{name:'javascript'},
{name:'meteor'}
];
var index = _.findIndex(sourceArray, function(x) {
return x.name === 'javascript';
});
var item = sourceArray.splice(index, 1)[0];
编辑:您也可以使用_.findWhere
和_.without
来完成此操作,如mef的回答所示。它效率低一点,但也更具可读性。但请注意,它将删除具有该键值对的对象的所有实例,而不仅仅是第一个,因此请确保您想要的行为。
答案 1 :(得分:1)
linked answer显示了如何操作:
var item = _.findWhere(a, {name:'javascript'}) // find item
a = _.without(a, item); // remove the item from the array
var a = [
{name:'java'},
{name:'ruby'},
{name:'javascript'},
{name:'meteor'}
];
var item = _.findWhere(a, {name:'javascript'})
a = _.without(a, item);
console.log('matched item:', item)
console.log('array a without the item:', a)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
see output in the console
答案 2 :(得分:0)
我做了一个html页面的例子,它创建了2个字符串数组和3个按钮 1.采用元素&#39; java&#39;一个并把它放在b上 2.警告每个元素 3.警告b上的每个元素
<html>
<head>
<script>
var a = [
{name:'java'},
{name:'ruby'},
{name:'javascript'},
{name:'meteor'}
];
var b = [
{name:'c#'},
{name:'vb'}
];
function lista(){
for (var count = 0; count < a.length; count++) {
alert(a[count].name);
}
}
function listb(){
for (var count = 0; count < b.length; count++) {
alert(b[count].name);
}
}
function takeOff(str){
for (var count = 0; count < a.length; count++) {
if(a[count].name == str){
b.push(a[count]);
a.splice(count, 1);
}
}
}
</script>
</head>
<body>
<button onclick="takeOff('java');">takeOff 'java'</button>
<button onclick="lista();">list a</button>
<button onclick="listb();">list b</button>
</body>
</html>
希望这是你想要实现的目标。