【问题标题】:Combine JSON data合并 JSON 数据
【发布时间】:2020-06-30 23:29:38
【问题描述】:

我需要合并一些数据。我有一个数组var company = ["Toyota", "Honda"],并且我在 javascript 文件中有一些相应的数据。

JS 文件:

var Toyota = {
  text: "Toyota",
  origin: "Japan",
  icon: "icon"
};

var Ford = {
  text: "Ford",
  founder: "Henry Ford",
  icon: "icon"
};

var Honda = {
  text: "Honda",
  models: "12"
};

如何读取此文件以仅查找 数组中存在的元素,然后创建如下所示的 JSON 对象(JSON 对象是两家公司,因为 Ford 不存在于数组中)。 JSON 的数据将从 javascript 文件中获取。我正在尝试用 javascript 编写代码。

{ 
 "name": "Toyota",
 "origin": "Japan",
},
{
 "text": "Honda",
 "models": "12",
},

谢谢

【问题讨论】:

  • 找不到文件的 URL。您还应该将文件内容发布到pastebin.com
  • 感谢固定网址

标签: javascript arrays json for-loop


【解决方案1】:

你可以这样做:

var company = ["Toyota", "Honda"];

var Toyota = {
  text: "Toyota",
  origin: "Japan",
  icon: "icon"
};

var Ford = {
  text: "Ford",
  founder: "Henry Ford",
  icon: "icon"
};

var Honda = {
  name: "Honda",
  models: "12"
};

let final = [];
[Toyota, Honda, Ford].forEach(brand => {
  if (company.includes(brand.text) || company.includes(brand.name)) {
    final.push(brand);
  }
});

编辑 您可以像这样在不同的文件中使用变量:

文件 1


export var Toyota = {
  text: "Toyota",
  origin: "Japan",
  icon: "icon"
};

export var Ford = {
  text: "Ford",
  founder: "Henry Ford",
  icon: "icon"
};

export var Honda = {
  name: "Honda",
  models: "12"
};

文件 2(您将在其中使用文件 1)

import {Ford, Honda, Toyota} from './file1.js'

var company = ["Toyota", "Honda"];
let final = [];
[Toyota, Honda, Ford].forEach(brand => {
  if (company.includes(brand.text) || company.includes(brand.name)) {
    final.push(brand);
  }
});

可以帮助您理解这个问题的答案的资源: - Object Destruction - Import/Export ES6

【讨论】:

  • 这很有帮助。有什么办法可以在不同的文件中使用[Toyota, Honda, Ford].forEach 循环?由于这些变量在文件@Charlie 本地可用
  • 我会更新我的答案,告诉你如何在单独的文件中使用它们
  • 你是救世主。非常感谢@查理。我将以此作为参考,因为我使用的是 angularJS,我们无法按照您的方式导入导出。但我会通过环顾四周来弄清楚这部分:)。
  • 如果问题引导您找到解决方案,请接受它作为正确答案
  • @netchi 您在投票按钮下方有一个“复选标记”图标。当您单击它时,您将答案标记为正确的答案
【解决方案2】:

您的 JS 文件在全局范围内声明变量。这意味着它们不仅在函数内部可用,而且在任何地方都可用。因此,它们成为window 对象的属性。所以你可以像这样访问它们:

window["Toyota"]

一旦你知道了这一点,你就可以这样做:

var company = ["Toyota", "Honda"];
var result = company.map(function (c) { return window[c]; });

console.log(result); // [{ "name": "Toyota", "origin": "Japan" }, ...]

【讨论】:

  • 很高兴注意到任何名称中包含 global 的东西都是不好的做法
猜你喜欢
  • 1970-01-01
  • 2018-09-23
  • 2013-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
  • 2012-08-28
  • 2013-11-17
相关资源
最近更新 更多