Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从不同数组中删除对象/数组差异_Javascript_Jquery_Object - Fatal编程技术网

Javascript 从不同数组中删除对象/数组差异

Javascript 从不同数组中删除对象/数组差异,javascript,jquery,object,Javascript,Jquery,Object,我有两个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:3

我有两个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' },
];

您可以使用jQuery扩展函数来实现这一点

试试这个:

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;
        }
    }
}
上面的解决方案保留了数组键,但如果要重置它们,可以对循环执行另一个

var object_new = [];
for (var i in object_1) {
    object_new[object_new.length] = object_1[i];
}
你可以用

// 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']
,则可以使用本机
索引,这比javascript循环快得多。

这里有一种方法:

// 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);
});
JSIDLE链接:


注意:它将修改object_1数组。

我认为,简单的解决方案是(经过测试的):

这似乎行得通

 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);
});
这是我小提琴的链接


我想在上班前试一试,但我只走了一半

下面是一个函数,它将为您提供所有eventtime值。只需对每个对象调用它,如下所示:

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;
}
再加上@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);

请注意,这个问题与JSON完全无关。您似乎混淆了JavaScript对象文本(JavaScript语言语法的结构)和JSON(一种独立于语言的数据交换格式,如XML或CSV)。我将相应地编辑您的问题。另请参见:。合并如何删除对象?这是一个糟糕的答案。请不要只是发布链接,特别是如果它实际上没有回答问题的话。很酷,这和我的答案一样,但是由于新的es5数组方法,它被简化了。但是需要注意的是,在旧浏览器上不起作用。您可以使用jQuery的$.map和$.grep完成同样的事情
 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);
});
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'}
];
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);