如何查找和删除源中的项目并分配已删除的项目?

时间:2015-11-09 12:11:50

标签: underscore.js

我有一个对象数组

a = [
    {name:'java'},
    {name:'ruby'},
    {name:'javascript'},
    {name:'meteor'}
];

我希望找到一个键/值,从源中删除它并使用下划线将其分配给另一个变量。我尝试了_.find, _.findWhere,但他们没有删除找到的项目。

问题是找到一个项目,删除它并使用下划线返回删除的项目。

3 个答案:

答案 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>

希望这是你想要实现的目标。