【问题标题】:Pure JavaScript JSON compare array纯 JavaScript JSON 比较数组
【发布时间】:2017-07-07 10:03:50
【问题描述】:

我必须比较一些 JSON 数据并返回位置索引。我使用纯 JavaScript。

我有以下数据:

 NAMES
 [
    {
      "someName" : Name1,
      "secondData" : "aaaa1",
      "thirdData" : bbbb1
    },
    {
      "someName" : Name2,
      "secondData" : "aaaa2",
      "thirdData" : bbbb2
    },
    {
      "someName" : Name3,
      "secondData" : "aaaa3",
      "thirdData" : bbbb3
    },
        {
      "someName" : Name4,
      "secondData" : "aaaa4",
      "thirdData" : bbbb4
    }
]

和 JSON SEATS

[
  {
    "seats" : 0,
    "someName" : "Name4",
    omeData" : null,
    "someData" : null
  },
  {
    "seats" : 1,
    "someName" : "Name3",
    "someData" : null,
    "someData" : null
  },
  {
    "seats" : 2,
    "someName" : "Name1",
    "someData" : null,
    "someData" : null
  },    
  {
    "seats" : 3,
    "someName" : "Name2",
    "someData" : null,
    "someData" : null
  }
]

我想要做的就是像这样比较这个 JSON:

Take someName from NAMES.someName and search the same name in SEATS.someName if is the same create new array RESULTS. Index in RESULTS array shuldbe SEATS.seats and data from NAMES.

以下示例

RESULTS[0] = NAMES[{"someName" : Name4,"secondData" : "aaaa4","thirdData" : bbbb4}] 
RESULTS[1] = NAMES[{"someName" : Name3,"secondData" : "aaaa3","thirdData" : bbbb3}] 
RESULTS[2] = NAMES[{"someName" : Name1,"secondData" : "aaaa1","thirdData" : bbbb1}] 
RESULTS[3] = NAMES[{"someName" : Name2,"secondData" : "aaaa2","thirdData" : bbbb2}] 

我开始这样做,但我堆叠

for(i=0;i<=459; i++) {
  if(mergeData[i][2] == jsonData[4].rows[i].find(compareElement)) {
  }
}
function compareElement(element) {
  return element.someName == i;
}

问题是如果我像这样使用 find 会出现一些错误并且程序停止我找不到解决方法。

【问题讨论】:

  • 如果新数组的索引取自任意对象属性,您最终可能会得到一个稀疏数组。你没问题吗?

标签: javascript arrays json filter find


【解决方案1】:
var result = [];

NAMES.forEach(function(name) {
  var found = SEATS.find(function(seat) {
    return name.someName === seat.someName
  });

  if (found) {
    result[found.seats] = name;
  }
});

【讨论】:

  • 谢谢!完美工作!
【解决方案2】:

此解决方案适用于对象和数组。

function compare(obj: any, obj2: any): boolean {
  if (typeof obj !== typeof obj2) {
    return false;
  }
  if (typeof obj !== "object" && typeof obj2 !== "object") {
    return obj === obj2;
  } else {
    for (let key in obj) {
      if (key) {
        return compare(obj[key], obj2[key]);
      }
    }
    return false;
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 2019-07-12
    • 1970-01-01
    相关资源
    最近更新 更多