2016-04-21 4 views
0

を比較:Javascriptが、私はこのコードを持つ2つの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要素がすでにarray_of_all_datesにexcistならば、

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

はどのようにこれを行うには... array_of_all_datesからそれを削除し、jsonからこれを置きますか?助けてください。

+0

編集

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

、あなたはmergedItemsと呼ばれる1つのリストにリストの両方を追加するとしましょう私はあなたが求めていることを知っています。 ** start **プロパティの配列に**結合しようとしています。一致したオブジェクトが見つかると、 'array_of_all_dates'配列のそのオブジェクトを' json'配列の対応するオブジェクトに置き換えます。 これは間違いありませんか? –

+0

はい、また、array_of_all_datesからdayを使用することもできます。これはmoment.utc(json.start).valueOf()/ 86400000と同じです。 jsonから... – Andrew

+0

の2つの値を比較することができますが、両方から開始することもできます – 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あるので、重複した「スタートをせずに、これら2に参加する必要があり

[ 
    { 
     "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 
    }, 
... 
} 

です"フィールド。 私のアプローチでは、2つのJSONデータオブジェクトをマージして、重複する開始フィールド項目を削除します。 jQueryので

サンプル実装:ちょうど一定であることを 実施例

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