2016-04-21 3 views
0

У меня есть этот код:Javascript присоединиться два JSON и сравнить

var json = '[{"id":113,"price":55,"start":"Sun, 24 Apr 2016 00:00:00 +0000","user_id":8},{"title":"","start":"2016-04-25T23:00:00.000Z","price":"115.7"},{"title":"","start":"2016-05-06T23:00:00.000Z","price":"115.7"},{"id":114,"price":45,"start":"Sun, 08 May 2016 00:00:00 +0000","user_id":9},{"title":"","start":"2016-05-08T23:00:00.000Z","price":"115.7"},{"id":111,"price":55,"start":"Wed, 01 Jun 2016 00:00:00 +0000","user_id":11},{"title":"","start":"2016-06-01T23:00:00.000Z","price":"115.7"},{"id":110,"price":53,"start":"Fri, 03 Jun 2016 00:00:00 +0000","user_id":8}]'; 

moment.utc().valueOf(); 

function fulljson(data) { 

    data = jQuery.parseJSON(data); 

    start = moment.utc('Sun, 24 Apr 2016 00:00:00 +0000').valueOf()/86400000; 
    start = parseInt(start); 
    console.log('pocetak'+start); 

    now = moment.utc().valueOf()/86400000; 
    now = parseInt(now); 
    console.log('sada'+now); 

    end = moment.utc('Sun, 05 Jun 2016 00:00:00 +0000').valueOf()/86400000; 
    end = parseInt(end); 
    console.log('kraj'+end); 

    auction_end = parseInt('3'); 
    now = now + auction_end; 
    console.log('a sada je '+now); 

    if (start > now) { 
    pocetak = start; 
    console.log(pocetak); 
    } else { 
    pocetak = now; 
    console.log(pocetak); 
    } 

var array_of_all_dates = []; 
    for (i = pocetak; i < end; i++) { 
    var new_object = { 
        title: '1', 
        start: moment(i*86400000).utcOffset('+0000').format(), 
        price: '{{$article->lowest_bid}}' 
       }; 
    array_of_all_dates.push(new_object); 
} 
document.write(JSON.stringify(array_of_all_dates)); 
    console.log(array_of_all_dates); 
}; 


fulljson(json); 

так что в конце концов вы видите, что у меня есть json и array_of_all_dates. Теперь я хочу присоединиться к json к array_of_all_dates, но если тот же самый start элемент уже спроста в array_of_all_dates затем удалить его из array_of_all_dates и поставить это от json ...

http://jsbin.com/qekijumobe/edit?html,js,output

Как это сделать? пожалуйста помоги.

+0

Просто, чтобы быть уверенным Я знаю, о чем вы спрашиваете. Вы пытаетесь ** присоединить ** к массивам ** в качестве свойства ** start **. Когда вы находите согласованный объект, вы хотите заменить этот объект в массиве 'array_of_all_dates' соответствующим объектом из массива' json'. Это правильно? –

+0

да, а также вы можете использовать день из array_of_all_dates, такой же, как moment.utc (json.start) .valueOf()/86400000; от json ... так что вы можете сравнить это два значения – Andrew

+0

, но также вы можете использовать начало с обоих ... для сравнения – Andrew

ответ

0

Существует удобная библиотека javascript http://underscorejs.org/, которую вы можете использовать для этого. Это не совсем соединение, но оно выполняет задачу с одним циклом.

_.each(jQuery.parseJSON(json), function(d){  

     console.log(d.start) 
     var idx = _.findIndex(array_of_all_dates, function(ad){ return d.start == ad.start }); 

     if(idx>-1){ 
      array_of_all_dates[idx] = d; 
     } 
    }); 

Я заметил, что совпадений не было, потому что ваши форматы даты не совпадают точно. Вы можете попробовать создать экземпляр нового моментального объекта в предикате findIndex и указать конкретный формат даты и времени.

1

Насколько я понимаю, и интерпретировать ваш вопрос

JSon является

[ 
    { 
     "id":113, 
     "price":55, 
     "start":"Sun, 24 Apr 2016 00:00:00 +0000", 
     "user_id":8 
    }, 
    { 
     "title":"", 
     "start":"2016-04-25T23:00:00.000Z", 
     "price":"115.7" 
    }, 
    { 
     "title":"", 
     "start":"2016-05-06T23:00:00.000Z", 
     "price":"115.7" 
    }, 
.. 
} 

И array_of_all_dates является

[ 
    { 
     "title":"1", 
     "start":"2016-04-24T00:00:00+00:00", 
     "day":16915, 
     "price":100 
    }, 
    { 
     "title":"1", 
     "start":"2016-04-25T00:00:00+00:00", 
     "day":16916, 
     "price":100 
    }, 
    { 
     "title":"1", 
     "start":"2016-04-26T00:00:00+00:00", 
     "day":16917, 
     "price":100 
    }, 
... 
} 

Так что вам нужно, чтобы присоединиться к этим двум, не имея дубликат «старт "поле. Мой подход будет слишком объединять два объекта данных JSON и удалять повторяющиеся элементы поля запуска.

Пример реализации в JQuery:

Допустим, вы добавляете как списки в один список, который называется mergedItems затем

var uniqueItems = []; 
$.each(mergedItems["start"], function(i, el){ 
    if($.inArray(el, uniqueItems) === -1) uniqueItems.push(el); 
}); 

Edit: Рабочий пример

http://jsbin.com/vakodahile/edit?html,js,output

+0

Можете ли вы добавить это здесь: http://jsbin.com/qekijumobe/edit?html,js, выход ... есть и – Andrew

+0

также начало от json важно, чем начать с массива ... – Andrew

+0

@Andrew. Я обновил рабочую копию. Если вам нужно начать с json, тогда сделайте json.concat (array) –

Смежные вопросы