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