2016-04-21 69 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); 

所以在最後你看,我有jsonarray_of_all_dates。現在我想加入jsonarray_of_all_dates,但如果同一start元素已經excist到array_of_all_dates然後從array_of_all_dates刪除它,然後把這個從json ......

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

如何做到這一點?請幫忙。

+0

只要是一定的我知道你在問什麼。您正嘗試** ** ** ** start **屬性上的數組。當你找到一個匹配的對象時,你想用'json'數組中相應的對象替換'array_of_all_dates'數組中的那個對象。 這是正確的嗎? –

+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); 
}); 

編輯: 工作實例

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) –