我有两个JavaScript对象:
object_1 = [
{'value': '9:00', 'text':'9:00 am', 'eventtime':'09:00:00' },
{'value': '9:30', 'text':'9:30 am', 'eventtime':'09:30:00' },
{'value': '10:00', 'text':'10:00 am', 'eventtime':'10:00:00' },
{'value': '10:30', 'text':'10:30 am', 'eventtime':'10:30:00' },
{'value': '11:00', 'text':'11:00 am', 'eventtime':'11:00:00' },
{'value': '11:30', 'text':'11:30 am', 'eventtime':'11:30:00' },
];
object_2 = [
{'eventtime': '10:30:00'},
{'eventtime': '11:00:00'}
];
我想删除object_1
中具有相同eventtime
值的对象,并将其存储在新的数组/对象中。请帮助我这样做,我无法找到解决方案。
这将是新的数组/对象:
object_new = [
{'value': '9:00', 'text':'9:00 am', 'eventtime':'09:00:00' },
{'value': '9:30', 'text':'9:30 am', 'eventtime':'09:30:00' },
{'value': '10:00', 'text':'10:00 am', 'eventtime':'10:00:00' },
{'value': '11:30', 'text':'11:30 am', 'eventtime':'11:30:00' },
];
答案 0 :(得分:4)
这是一种方法:
// create a plain array with just the eventtime values
var values = object_2.map(function(item) { return item['eventtime']; });
// use .filter() to get an array with just the values we need
var result = object_1.filter(function(item) {
return !(values.indexOf(item['eventtime']) !== -1);
});
答案 1 :(得分:0)
试试这个:
for (var i in object_2) {
for (var j in object_1) {
if (object_1[j].eventtime === object_2[i].eventtime) {
delete object_1[j];
break;
}
}
}
上述解决方案保留了数组键,但如果要重置它们,则可以执行另一个for
循环
var object_new = [];
for (var i in object_1) {
object_new[object_new.length] = object_1[i];
}
答案 2 :(得分:0)
您可以使用
// Declare variables
var object_1 = [
{'value': '9:00', 'text':'9:00 am', 'eventtime':'09:00:00' },
{'value': '9:30', 'text':'9:30 am', 'eventtime':'09:30:00' },
{'value': '10:00', 'text':'10:00 am', 'eventtime':'10:00:00' },
{'value': '10:30', 'text':'10:30 am', 'eventtime':'10:30:00' },
{'value': '11:00', 'text':'11:00 am', 'eventtime':'11:00:00' },
{'value': '11:30', 'text':'11:30 am', 'eventtime':'11:30:00' }
],
object_2 = [
{'eventtime': '10:30:00'},
{'eventtime': '11:00:00'}
],
object_new = object_1.slice(),
temp = [];
// Obtain temp=['10:30:00','11:00:00'] from object_2
for (var i=object_2.length-1; i>=0; --i) {
temp[i] = object_2[i].eventtime;
}
// Remove the elements you don't want
for (var i=object_new.length-1; i>=0; --i) {
if ( temp.indexOf( object_new[i].eventtime ) !== -1) {
object_new.splice(i, 1);
}
}
请注意,如果您首先将[{'eventtime': '10:30:00'}, {'eventtime': '11:00:00'}]
转换为['10:30:00','11:00:00']
,那么您可以使用原生indexOf
,这比javascript循环要快得多。
答案 3 :(得分:0)
for (var i = object_1.length - 1; i >= 0; i--)
{
for (var j in object_2)
{
if (object_1[i].eventtime === object_2[j].eventtime)
{
object_1.splice(i, 1);
break;
}
}
}
JSfiddle链接:http://jsfiddle.net/androdify/5ukBF/
注意:它将修改object_1数组。
答案 4 :(得分:0)
我认为,简单的解决方案是(经过测试):
var object_new = [];
for (var idx1 in object_1) {
var found = false;
for (var idx2 in object_2) {
if (object_1[idx1].eventtime === object_2[idx2].eventtime) {
found = true;
break;
}
}
if(!found){
object_new.push(object_1[idx1]);
}
}
答案 5 :(得分:0)
这似乎工作正常
object_1 = [
{'value': '9:00', 'text':'9:00 am', 'eventtime':'09:00:00' },
{'value': '9:30', 'text':'9:30 am', 'eventtime':'09:30:00' },
{'value': '10:00', 'text':'10:00 am', 'eventtime':'10:00:00' },
{'value': '10:30', 'text':'10:30 am', 'eventtime':'10:30:00' },
{'value': '11:00', 'text':'11:00 am', 'eventtime':'11:00:00' },
{'value': '11:30', 'text':'11:30 am', 'eventtime':'11:30:00' },
];
object_2 = [
{'eventtime': '10:30:00'},
{'eventtime': '11:00:00'}
];
temp = object_2.map(function(o){return o["eventtime"]; })
var object_new = jQuery.grep(object_1, function( n, i ) {
return ( temp.indexOf(n.eventtime) === -1);
});
这是我小提琴的链接
答案 6 :(得分:0)
在我出去工作之前,我想试一试,但我只有一半的路要走。
这是一个为您提供所有事件时间值的函数。只需在每个对象上调用它,如下所示:
getVals(object_1);
function getVals(obj) {
var vals = [];
for (var i = 0, len = obj.length; i < len; i++) {
for(prop in obj[i]) {
if(prop === 'eventtime') {
vals.push(obj[i][prop]);
}
}
};
return vals;
}
我希望至少可以帮助你更接近你的结果。
另外,我只想指出对象内部存在一些语法错误。我为你修好了:
object_1 = [
{'value': '9:00', 'text':'9:00 am', 'eventtime':'09:00:00' },
{'value': '9:30', 'text':'9:30 am', 'eventtime':'09:30:00' },
{'value': '10:00', 'text':'10:00 am', 'eventtime':'10:00:00' },
{'value': '10:30', 'text':'10:30 am', 'eventtime':'10:30:00' },
{'value': '11:00', 'text':'11:00 am', 'eventtime':'11:00:00' },
{'value': '11:30', 'text':'11:30 am', 'eventtime':'11:30:00' }
];
object_2 = [
{'eventtime': '10:30:00'},
{'eventtime': '11:00:00'}
];
将它与@techfoobar的非常好的解决方案相结合,它似乎对我有用:
var values = object_2.map(function(item) {
return item['eventtime'];
});
var result = object_1.filter(function(item) {
if(values.indexOf(item['eventtime']) !== -1) {
return false;
}
return true;
});
console.log(result);
答案 7 :(得分:-3)
您可以使用jQuery扩展函数
执行此操作http://api.jquery.com/jQuery.extend/
var object = $.extend({}, object1, object2);