【问题标题】:How to compare two json object, check if id is same then assign to another object value?如何比较两个 json 对象,检查 id 是否相同然后分配给另一个对象值?
【发布时间】:2020-06-27 09:11:12
【问题描述】:

我有两个对象

var JSON_Categories = '[{ "id" : "1", "text" : "Category A"}, { "id" : 2, "text" : "Category B" }]';
var JSON_Article = '[{ "id" : "1", "text" : "Article text A"}, { "id" : 3, "text" : "Article B"}]';
var categories = JSON.parse(JSON_Categories);
var article = JSON.parse(JSON_Article);

如果两个 JSON 值的 id 匹配,我需要为文本类别文本值分配文章文本值。

它尝试过这样的事情,我知道这不是一个好的解决方案,有人可以帮我吗?

var categoryValue = new Object();
categories.forEach(function(category) {
articles.forEach(article => {
    if (category.id === article.id) {
        categoryValue.id = category.id;
        categoryValue.text = article.text;
    } else {
        categoryValue.id = category.id;
        categoryValue.text = category.text;
    }
});
});

console.log('categoryValue', categoryValue);

       

【问题讨论】:

  • 您要替换categories 中的所有匹配对象还是只替换一个?
  • 另外,你想替换原始数组中的值还是用修改后的对象创建一个新数组?
  • 只有一个文本值,但是替换文本值后我需要竞争对象,一个值。
  • 这不是 JSON 问题。是的,JSON_CategoriesJSON_Article 包含 JSON,但除了解析之外,您没有对它们做任何事情。实际比较是问题/问题。

标签: javascript angularjs angular typescript


【解决方案1】:

你可以map它和find第二个数组中的对象:

var JSON_Categories = JSON.parse('[{ "id" : "1", "text" : "Category A"}, { "id" : 2, "text" : "Category B" }]');
var JSON_Article = JSON.parse('[{ "id" : "1", "text" : "Article text A"}, { "id" : 3, "text" : "Article B"}]');

var result = JSON_Categories.map(({id, text})=>({id, text:JSON_Article.find(k=>k.id==id)?.text || text}));

console.log(result);

【讨论】:

  • 非常感谢它与 js 示例完美配合,但是当与 Angular 8 一起使用时,出现错误“:”预期,我如何在 Angular 中使用相同的?
  • @YOG_PHP 似乎你收到了type 错误,请尝试指定这样的类型JSON_Categories.map(({id, text}:any)
  • (k=>k.id==id)?.text,在这个地方显示错误。
猜你喜欢
  • 1970-01-01
  • 2010-11-22
  • 2020-11-16
  • 1970-01-01
  • 2017-07-10
  • 1970-01-01
  • 2012-06-23
  • 2021-08-17
  • 1970-01-01
相关资源
最近更新 更多