【问题标题】:Delete a json value which is inside a set of json [duplicate]删除一组json中的json值[重复]
【发布时间】:2020-05-22 08:28:54
【问题描述】:

我有一个如下的 JSON。

{
"key" : "Balance",
"translation" : [ 
    {
        "language" : "English",
        "value" : "abc"
    }, 
    {
        "language" : "German",
        "value" : "faq"
    }
]
}

我正在传递语言“英语”,并且应该删除该语言及其值。有很多键,所以我在函数中使用 for 循环来获取该语言。

this._work.forEach( ( translation ) => {
        translation.translation.forEach( data => delete data.language[ language ] );
    } );

this._work 包含上述 json 值。这里的语言及其值不会被删除。我错过了什么?

【问题讨论】:

标签: javascript angular foreach


【解决方案1】:

旁注:没有什么叫做JSON en js,你拥有的是一个js对象。

其实你是想从字符串language中删除属性“English”,这是错误的,没有意义。

例如:

delete data.language["English"]

我推荐你使用函数Array.prototype.filter如下:

let data = {
  "key": "Balance",
  "translation": [{
      "language": "English",
      "value": "abc"
    },
    {
      "language": "German",
      "value": "faq"
    }
  ]
},
    language = "English";
    
data.translation = data.translation.filter(({language: lang}) => lang !== language);
console.log(data);
    

【讨论】:

  • 花括号里有什么具体要指定的吗?
  • @Kirataka 抱歉,我没听懂。
  • 你已经在花括号中声明了这个({language: lang})。是否有特定原因?
  • @Kirataka 这只是为了使用属性语言的解构赋值,没有原因,只是为了一种花哨的方法,否则,在函数 filter 的处理程序中你必须访问属性如下:object.language
【解决方案2】:

在您的解决方案中,delete data.language[ language ] 将不起作用,因为 data.language['English'] 未定义。当您想通过使用 key 从对象而不是数组中的行中删除时,通常会使用这种删除技术。

您可以使用filter 代替forEach

this._work.forEach( ( row ) => {
   row.translation = row.translation.filter( translation => translation.language !== translation );
} );

【讨论】:

    【解决方案3】:
    {
       property: 'value',
       language: 'English'
    }
    
    

    delete 指令需要提供要删除的属性。比如delete data.propertydelete data.language。在代码中,您提供了 data.language[language] 指向一个值。如果你想删除值为English的语言属性,那么你需要的代码是

    this._work.forEach( ( translation ) => {
            translation.translation.forEach( data => if (language === data.language) { delete data.language; });
        } );
    

    结果你会得到:

    {
    "key" : "Balance",
    "translation" : [ 
        {
            "value" : "abc"
        }, 
        {
            "language" : "German",
            "value" : "faq"
        }
    ]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 2019-06-21
      • 2016-01-05
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多