2016-11-12 42 views
2

我有2個json數組,它們是2個http.get請求的結果。 一個包含了一個觀察名單,如:從2個http請求的元素創建新陣列

json1= [ 
{「id」:6,」ticker」:」PG」,」gt_lt」:」<「,」price_trigger」:75}, 
{「id」:8,」ticker」:」T」,」gt_lt」:」<「,」price_trigger」:39.5}, 
{「id」:9,」ticker」:」WM」,」gt_lt」:」<「,」price_trigger」:60} 
]; 

第二個包含股票定價信息:

json2 = [ 
{「symbol」:」PG」,」name」:」Procter & Gamble Company (The) 「,」lastTradeDate」:null,」lastTradePriceOnly」:88.4,」change」:0.35,」dividendYield」:3.04,」peRatio」:23.93,」volume」:1333524}, 
{「symbol」:」T」,」name」:」AT&T Inc.」,」lastTradeDate」:null,」lastTradePriceOnly」:39.94,」change」:-0.26,」dividendYield」:4.78,」peRatio」:17.22,」volume」:2865061}, 
{「symbol」:」WM」,」name」:」Waste Management, Inc. Common S」,」lastTradeDate」:null,」lastTradePriceOnly」:62.98,」change」:0.17,」dividendYield」:2.61,」peRatio」:24.61,」volume」:276554} 
]; 

我希望創建第三JSON數組或由第一陣列的對象和第二的所有元素array「where」ticker「(json1)==」symbol「(json2)。 這將允許我在新陣列上使用ngFor,並將所有必需的信息放入一個列表或表中。任何幫助將不勝感激。

+0

@ sylvain1264沒有'每()'數組原型 – charlietfl

+0

在標誌性的一個你想消除其合併後的對象嗎? 'ticker'或'symbol'? – Redu

+0

@Redu,我寧願消除「符號」。 – poppyc

回答

0

你可以像這樣做,簡單的方法:

var json3 = []; 

json1.forEach(function(v,i){ 
    json2.forEach(function(b,j){ 
     if(b.symbol == v.ticker) 
      json3.push(Object.assign({},v,b)); 
    }); 
}); 
+0

如果'json1 [i] ='也是Object.assign()的第一個參數, –

0

這裏是一個方式做你想要什麼:

let json3 = json1.map(item1 => [item1, json2.find(item2 => item2.symbol === item1.ticker)]) 

結果是由兩個元素的子數組的數組:項目json1json2相關的項目。


編輯 a,查找填充工具:

下面是find方法that I grabbed from MDN一個填充工具:

if (!Array.prototype.find) { 
    Object.defineProperty(Array.prototype, 'find', { 
    value: function(predicate) { 
    'use strict'; 
    if (this == null) { 
     throw new TypeError('Array.prototype.find called on null or undefined'); 
    } 
    if (typeof predicate !== 'function') { 
     throw new TypeError('predicate must be a function'); 
    } 
    var list = Object(this); 
    var length = list.length >>> 0; 
    var thisArg = arguments[1]; 
    var value; 

    for (var i = 0; i < length; i++) { 
     value = list[i]; 
     if (predicate.call(thisArg, value, i, list)) { 
     return value; 
     } 
    } 
    return undefined; 
    } 
    }); 
} 

廣場這個地方,在你的程序的開始。它可以在瀏覽器儘早加載的腳本文件中。

+0

這不起作用 – sylvain1264

+0

似乎適合我。你有什麼問題? –

+0

@Andrew Eisenberg我收到一個錯誤:屬性'find'在類型'any []'上不存在。任何想法可能造成的? – poppyc