JAVASCRIPT:如何在JSON对象中删除一个JSON对象?

3

如何在JSON对象中删除一个JSON对象?

[
    [
        {"name":"formtype","value":"ordering"},          
        {"name":"extera_Ordering_json[id]","value":"1"}
   ],
   [
        {"name":"extera_Ordering_json[count]","value":"20"},               
        {"name":"coupon","value":""},
        {"name":"formtype","value":"ordering"}, 
        {"name":"extera_Ordering_json[id]","value":"2"}
   ],
   [
       {"name":"extera_Ordering_json[count]","value":"7"},
       {"name":"coupon","value":"1"},
       {"name":"formtype","value":"ordering"},
       {"name":"extera_Ordering_json[id]","value":"3"}
   ],
   [   {"name":"extera_Ordering_json[count]","value":"1"},
       {"name":"coupon","value":"1"},
       {"name":"formtype","value":"ordering"},
       {"name":"extera_Ordering_json[id]","value":"4"}
   ]
]

我将这个 JSON 存储在 ordering 中。

现在我想要删除它。

   [   {"name":"extera_Ordering_json[count]","value":"1"},
       {"name":"coupon","value":"1"},
       {"name":"formtype","value":"ordering"},
       {"name":"extera_Ordering_json[id]","value":"4"}
   ]

我的关键字是extera_Ordering_json[id](它不是唯一的)

我做了以下操作:

ordering = JSON.parse(ordering);
var temp;
$.each(ordering, function(idx, obj)
{
    if(obj.Ordering_json[id] != 4)// not works
    {
        temp[] = obj;
    }
    temp[] = obj
}
ordering = JSON.stringify(temp);

1
idx 不等于 id ... :-? - Álvaro González
6个回答

1
""extera_Ordering_json[id]"只是一个字符串,因此您需要迭代每个数组中的所有对象,并找到具有该字符串作为name的对象,并检查同一对象的value。"
"这里是一种映射和过滤的方法。"

var data = [
    [
        {"name":"formtype","value":"ordering"},          
        {"name":"extera_Ordering_json[id]","value":"1"}
   ],
   [
        {"name":"extera_Ordering_json[count]","value":"20"},               
        {"name":"coupon","value":""},
        {"name":"formtype","value":"ordering"}, 
        {"name":"extera_Ordering_json[id]","value":"2"}
   ],
   [
       {"name":"extera_Ordering_json[count]","value":"7"},
       {"name":"coupon","value":"1"},
       {"name":"formtype","value":"ordering"},
       {"name":"extera_Ordering_json[id]","value":"3"}
   ],
   [   {"name":"extera_Ordering_json[count]","value":"1"},
       {"name":"coupon","value":"1"},
       {"name":"formtype","value":"ordering"},
       {"name":"extera_Ordering_json[id]","value":"4"}
   ]
]
var searchVal = 1
data=data.map(function(arr){
   return arr.filter(function(o){
      return o.name !== "extera_Ordering_json[id]" || +o.value !== searchVal
   })
})

console.log(data)


1
你可以使用splice方法在JSON数组上删除特定索引处的元素:

var ordering = JSON.stringify([
    [
        {"name":"formtype","value":"ordering"},          
        {"name":"extera_Ordering_json[id]","value":"1"}
   ],
   [
        {"name":"extera_Ordering_json[count]","value":"20"},               
        {"name":"coupon","value":""},
        {"name":"formtype","value":"ordering"}, 
        {"name":"extera_Ordering_json[id]","value":"2"}
   ],
   [
       {"name":"extera_Ordering_json[count]","value":"7"},
       {"name":"coupon","value":"1"},
       {"name":"formtype","value":"ordering"},
       {"name":"extera_Ordering_json[id]","value":"3"}
   ],
   [   {"name":"extera_Ordering_json[count]","value":"1"},
       {"name":"coupon","value":"1"},
       {"name":"formtype","value":"ordering"},
       {"name":"extera_Ordering_json[id]","value":"4"}
   ]
])

temp = JSON.parse(ordering);
temp.splice(3, 1)
ordering = JSON.stringify(temp);
console.log(ordering)


1
在您的情况下,extera_Ordering_json[id] 不是键,而是 name 的值。

    var ordering = [
        [
            {"name": "formtype", "value": "ordering"},
            {"name": "extera_Ordering_json[id]", "value": "1"}
        ],
        [
            {"name": "extera_Ordering_json[count]", "value": "20"},
            {"name": "coupon", "value": ""},
            {"name": "formtype", "value": "ordering"},
            {"name": "extera_Ordering_json[id]", "value": "2"}
        ],
        [
            {"name": "extera_Ordering_json[count]", "value": "7"},
            {"name": "coupon", "value": "1"},
            {"name": "formtype", "value": "ordering"},
            {"name": "extera_Ordering_json[id]", "value": "3"}
        ],
        [{"name": "extera_Ordering_json[count]", "value": "1"},
            {"name": "coupon", "value": "1"},
            {"name": "formtype", "value": "ordering"},
            {"name": "extera_Ordering_json[id]", "value": "4"}
        ]
    ];
    var temp = [];
    $.each(ordering, function (key1, obj1) {
        $.each(obj1, function (key2, obj2) {
            if (obj2.name == 'extera_Ordering_json[id]' && obj2.value == 4) {
                delete ordering[key1];
            }
        });
        if(ordering[key1] != null){
            temp.push(ordering[key1]);
        }
    });
    console.log(JSON.stringify(temp));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


1
您正在使用id而不是idx。尝试这个。
if(obj.Ordering_json[idx] != 4)

1
你可以使用splice方法。
ordering = [ /*Array without json parsing*/ ];
var indexToDelete = 3;
ordering.splice( indexToDelete, 1); 
// 1 indicates only one element from array 
console.log(ordering);

谢谢。您的答案是按索引排序的。我想通过Ordering_json[id]值删除它。 - ANDA
2
不要在数组上使用“delete”,这会留下空洞,而长度仍然保持不变。 - charlietfl
对,@charlietfl,我忘了提到。谢谢 :) - Jimish Fotariya

1
这应该可以满足你的需求:

var ordering = [
    [
        {"name":"formtype","value":"ordering"},          
        {"name":"extera_Ordering_json[id]","value":"1"}
    ],
    [
        {"name":"extera_Ordering_json[count]","value":"20"},               
        {"name":"coupon","value":""},
        {"name":"formtype","value":"ordering"}, 
        {"name":"extera_Ordering_json[id]","value":"2"}
    ],
    [
       {"name":"extera_Ordering_json[count]","value":"7"},
       {"name":"coupon","value":"1"},
       {"name":"formtype","value":"ordering"},
       {"name":"extera_Ordering_json[id]","value":"3"}
    ],
    [   
       {"name":"extera_Ordering_json[count]","value":"1"},
       {"name":"coupon","value":"1"},
       {"name":"formtype","value":"ordering"},
       {"name":"extera_Ordering_json[id]","value":"4"}
    ]
];
    var sVal = 4;
    var indexToRemove = false;
    ordering.forEach(function(element, index) {
       element.forEach(function(subelement) {
           if (subelement.name == "extera_Ordering_json[id]" 
              && parseInt(subelement.value) == sVal){
              indexToRemove = index;
           }
       });
    });

    if (false !== indexToRemove) {
        ordering.splice(indexToRemove, 1);
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接