使用指定的日期键

时间:2015-05-27 05:09:58

标签: javascript underscore.js

我有一个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可用,但我无法弄明白。

2 个答案:

答案 0 :(得分:3)

您可以使用_.filter_.has_.partial_.negate方法,例如

console.log(_.filter(myArray, _.partial(_.negate(_.has), _, myDate)));
// [ { 'Wed May 24 2015 10:34:04 GMT+0000 (UTC)': 2.2 } ]
  • 此处,_.negate(_.has)将返回一个新功能,该功能将始终否定_.has的结果。

  • _.partial(_.negate(_.has), _, myDate)将返回一个新功能,该功能将接受占位符myArray_的值,并使用_.has中的值调用myArray {1}}和myDate作为参数。

  • 如果作为第一个参数传递的对象具有与传递给它的第二个参数同名的键,则
  • _.has将返回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 Version

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函数,并检查当前对象是否具有值myDate的属性,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 } ]

答案 1 :(得分:1)

我不知道下划线,但我希望这种简单的方法可以帮助你。

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);
    }
}