从2个http请求的元素创建新数组

时间:2016-11-12 14:32:46

标签: javascript arrays

我有2个json数组,这是2个http.get请求的结果。 一个包含一个观察列表,如:

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数组或对象,由第一个数组和第二个数组的所有元素组成,其中“ticker”(json1)==“symbol”(json2)。 这将允许我在新阵列上使用ngFor并将所有必需的信息放入一个列表或表中。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

这是一种做你想做的事情的方法:

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

结果是一个由两个元素的子数组组成的数组:项json1json2的关联项。

编辑查找polyfill:

以下是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;
    }
  });
}

将它放在程序开头的某处。它可以放在浏览器早期加载的脚本文件中。

答案 1 :(得分:0)

你可以这样轻松地做到这一点:

var json3 = [];

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