从具有指定日期键的数组中查找和删除对象
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
的值以 myArray
和 myDate
中的值作为参数调用。
_.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);
}
}
我有一个 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
的值以myArray
和myDate
中的值作为参数调用。_.has
将 returntrue
如果作为第一个参数传递的对象具有与传递给它的第二个参数同名的键。
旧版本_
如果您使用的是旧版本 _
,那么您只需传递一个函数对象即可,
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);
}
}