2016-11-12 40 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