简体   繁体   English

如何在重复块的特定索引处的json数组内添加元素?

[英]how to add an element inside a json array at the specific index in a repeating block?

I am trying to add element "delete:true" after each occurrence of "_rev " mentioned in the below sample request. 我试图在下面的示例请求中提到的每次出现“ _rev”之后添加元素“ delete:true”。

Original Request: 原始请求:

{
    "docs": [
        {
            "_id": "123",
            "_rev": "1-7836",
            },
        {
            "_id": "456",
            "_rev": "1-1192",
           }
         ]                         

}

Expected Request: 预期要求:

{
    "docs": [
        {
            "_id": "123",
            "_rev": "1-7836",
            "_deleted" :true
            },
        {
            "_id": "456",
            "_rev": "1-1192",
            "_deleted" :true
           }
         ]                         

}

When I tried the below code,the ""_deleted" :true" is getting inserted after the -rev element is closed. 当我尝试下面的代码时,在关闭-rev元素后将插入“ _deleted”:true。 PFB for the same and suggest. PFB为相同,并建议。

function main(params) {
for (var i = 0; i< params.docs.length; i++) {
for (var value in params.docs[i]) {
if(value == '_rev'  && params.docs[i]._rev ){ 
var string1 = JSON.stringify(params.docs[i]);
var str = ',';
var string2 = '"';
var string3 =str+string2+ '_deleted'+ string2+ ':' + "true" ;
var res =  string1 + string3  ;
}
}
}
}
  ######################
[
  "2018-01-23T09:44:23.568738362Z stdout:
  {\"_id\":\"123\",
  \"_rev\":\"1-7836\"},
  \"_deleted\":true"]

Use map and Object.assign instead of generating a string 使用mapObject.assign而不是生成字符串

var output = params.docs.map( s => Object.assign( {}, {"_deleted" :true}, s ) );

You can then convert this to string using JSON.stringify( output ); 然后,您可以使用JSON.stringify( output );将其转换为字符串JSON.stringify( output );

Demo 演示版

 var params = { "docs": [{ "_id": "123", "_rev": "1-7836", }, { "_id": "456", "_rev": "1-1192", } ] }; var output = params.docs.map(s => Object.assign({}, { "_deleted": true }, s)); console.log(output); 

 var data = { "docs": [ { "_id": "123", "_rev": "1-7836", }, { "_id": "456", "_rev": "1-1192", } ] } var newData = data['docs'].map(item => { item._delete = true return item }) console.log(newData); 

Why don't you simply put ._deleted attribute to doc, like this ? 您为什么不这样简单地将._deleted属性添加到doc呢?

function main(params) {
  for (var i = 0; i< params.docs.length; i++) {
    params.docs[i]._deleted = true;
    var res = JSON.stringify(params.docs[i]);
  }
 }
}

Or like this : 或者像这样:

function main(params) {
  for (var i = 0; i< params.docs.length; i++) {
    params.docs[i]["_deleted"] = true;
    var res = JSON.stringify(params.docs[i]);
  }
 }
}

You can reference the not existing attribute directly and assign an value: 您可以直接引用不存在的属性并分配一个值:

#!/usr/bin/js

var myJSON = { "docs": [ { "_id":"123", "_rev":"1-200" } ] }
console.log(myJSON);
myJSON.docs[0]["_deleted"]=true;
console.log(myJSON);

Output of example: 示例输出:

# js append.js 
{ docs: [ { _id: '123', _rev: '1-200' } ] }
{ docs: [ { _id: '123', _rev: '1-200', _deleted: true } ] }

Read the more extensive example here: Add new attribute (element) to JSON object using JavaScript 在此处阅读更广泛的示例: 使用JavaScript将新属性(元素)添加到JSON对象

So this might be a duplicate ... 所以这可能是重复的...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM