从具有指定日期键的数组中查找和删除对象

Finding and Removing Object From Array with Specified Date Key

我有一个 JavaScript 对象数组,它以 ISO 8601 日期字符串作为键,值的数字如下所示:

var myArray = [
  {"Wed May 27 2015 04:46:04 GMT+0000 (UTC)":1.1},
  {"Wed May 24 2015 10:34:04 GMT+0000 (UTC)":2.2}
]

我想像这样查找并删除与特定日期匹配的所有对象:

var myDate = "Wed May 27 2015 04:46:04 GMT+0000 (UTC)"

if(myDate is a key in myArray){
  //Remove it from myArray
}

结果是 myArray 现在看起来像这样:

[{"Wed May 24 2015 10:34:04 GMT+0000 (UTC)":2.2}]

我有可用的 Underscore JS,但我搞不懂。

你可以使用 _.filter, _.has, _.partial and _.negate 方法,像这样

console.log(_.filter(myArray, _.partial(_.negate(_.has), _, myDate)));
// [ { 'Wed May 24 2015 10:34:04 GMT+0000 (UTC)': 2.2 } ]
  • 在这里,_.negate(_.has) 将 return 一个新函数,它将始终否定 _.has 的结果。

  • _.partial(_.negate(_.has), _, myDate) 将 return 一个新函数,它将在占位符 __.has 中接受来自 myArray 的值以 myArraymyDate 中的值作为参数调用。

  • _.has 将 return true 如果作为第一个参数传递的对象具有与传递给它的第二个参数同名的键。


旧版本_

如果您使用的是旧版本 _,那么您只需传递一个函数对象即可,

console.log(_.filter(myArray, function(currentObject) {
    return !_.has(currentObject, myDate);
}));
// [ { 'Wed May 24 2015 10:34:04 GMT+0000 (UTC)': 2.2 } ]

Vanila JS 版本

console.log(myArray.filter(function(currenObject) {
    return !currenObject.hasOwnProperty(myDate);
}));
// [ { 'Wed May 24 2015 10:34:04 GMT+0000 (UTC)': 2.2 } ]

您可以简单地使用 Array.prototype.filter function and check if the current object has a property with the value of myDate, with Object.prototype.hasOwnProperty

如果你确定 myDate 不会有一个值不是 Object 的继承属性之一,那么你也可以使用 in operator,像这样

console.log(myArray.filter(function(currenObject) {
    return !(myDate in currenObject);
}));
// [ { 'Wed May 24 2015 10:34:04 GMT+0000 (UTC)': 2.2 } ]

我不知道underscoreJs,但我希望这个简单的方法能帮助你。

var myArray = [
              {"Wed May 27 2015 04:46:04 GMT+0000 (UTC)":1.1},
              {"Wed May 24 2015 10:34:04 GMT+0000 (UTC)":2.2}
            ];
var myDate = "Wed May 27 2015 04:46:04 GMT+0000 (UTC)";

for(i=0;i<myArray.length;i++)
{
    if(myDate == Object.keys(myArray[i]))
    {
        myArray.splice(i,1);
    }
}