【问题标题】:JS match data between 2 arraysJS匹配2个数组之间的数据
【发布时间】:2015-09-15 13:57:08
【问题描述】:

我有 2 个数组,需要匹配其中的数据。我需要从第一个数组中获取ID,从第二个数组中获取market_name。我需要使用这两个数组,即使wgg 数组看起来无关紧要。我使用if 匹配数据:item.market_name == wgg[j].market_name 它运行良好,但如果有多个具有相同market_name 的值,如下所示,它会为它们打印所有相同的 ID。例如,它打印的内容如下:

 market_name | ID
        John | 151
        John | 151
        John | 151
        Sam  | 115
    Somebody | 110

第一个数组(项目):

 market_name | ID
        John | 151
        John | 100
        John | 180
        Sam  | 115
    Somebody | 110

第二个数组(wgg[j]):

 market_name | ID
        John | 105
        John | 209
        John | 401
        Sam  | 115
    Somebody | 110

应该如何:

 market_name | ID
        John | 151
        John | 100
        John | 180
        Sam  | 115
    Somebody | 110

JS:

tradedata.forEach(function(item, j) {
    var resultas = tradedata.filter(function(item) {
            if (item.market_name == wgg[j].market_name) {
                assetas = item.id;
                return assetas;
            }
    });

if (resultas.length > 0) {
console.log(wgg[j].market_name);
console.log(assetas);
    }
}

【问题讨论】:

  • 但是您将它们都与return item.market_name == wgg[j].market_name; 相等,它不应该返回相同的数据吗?
  • @developer 我试过return assetas;,但还是一样。
  • 如果您要问的是,我如何找到数组中匹配的第一个元素,请查看 Array.prototype.indexOf() - developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • required 输出看起来与第一个数组相同 - wgg 数组如何影响输出?
  • wgg 数组用于market_name,item 数组用于ID。

标签: javascript arrays node.js


【解决方案1】:

这和你描述的一样

var tradedata = [
    { market_name: 'John', id: 151},
    { market_name: 'John', id: 100},
    { market_name: 'John', id: 180},
    { market_name: 'Sam', id: 115},
    { market_name: 'Somebody', id: 110}
];
var wgg = [
    { market_name: 'John', id: 105},
    { market_name: 'John', id: 209},
    { market_name: 'John', id: 401},
    { market_name: 'Sam', id: 115},
    { market_name: 'Somebody', id: 110}
];

var result = wgg.reduce(function(obj, item) {
    if (!obj.names[item.market_name]) {
        obj.names[item.market_name] = true;
        obj.data = obj.data.concat(tradedata.filter(function(trade) {
                return trade.market_name == item.market_name;
            })
        );
    }
    return obj;
}, {names:{}, data:[]}).data;

result.forEach(function(x) {
    console.log(x);    
})

【讨论】:

  • 嘿,谢谢它有效。你能回答我的问题吗?我在 result.forEach 中使用 mysql 3 操作。有时,例如,当数组中有 15 个值时,3 个 mysql 操作中有 1 个不执行(仅 15 次中的一次)。它真的很少发生。我之前使用 for() 没有任何问题。有什么问题?我知道它的信息不多,但也许你有这方面的经验。
  • 我知道 javascript ...我不知道 mysql
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
  • 2020-06-20
  • 2021-03-17
  • 1970-01-01
  • 2018-05-27
  • 2021-08-19
  • 2020-05-24
相关资源
最近更新 更多