如何删除json变量中的父字段,并在javascript或jquery中将其转换为json

How to remove parent fields in json variable and convert it to json in javascript or jquery

本文关键字:json javascript 并在 jquery 转换 何删除 删除 变量 字段      更新时间:2023-09-26

我正在做一个有很多对象参与的项目。我在javascript或jQuery中有以下要求。

我有以下对象:

var dataset = {
    "d0": { "id": 0, "name": "Housing", "value": 18 },
    "d1": { "id": 1, "name": "Travel", "value": 31.08 },
    "d2": { "id": 2, "name": "Restaurant", "value": 64 },
    "d3": { "id": 3, "name": "Bank", "value": 3 },
    "d4": { "id": 4, "name": "Movies", "value": 10 }
};

如何删除父字段并使其成为如下对象?

var d= [
    { "id": 0, "name": "Housing", "value": 18 },
    { "id": 1, "name": "Travel", "value": 31.08 },
    { "id": 2, "name": "Restaurant", "value": 64 },
    { "id": 3, "name": "Bank", "value": 3 },
    { "id": 4, "name": "Movies", "value": 10 }
]

完成此操作后,我想将此对象传递给一个javascript函数,该函数处理此变量d的值。

if(value >= 10 && value <= 20) {
    d[index].value = 7;
}
if(value >= 20 && value <= 40) {
    d[index].value = 8;
}

更新后的对象应该看起来像:

var d= [
    { "id": 0, "name": "Housing", "value": 7 },
    { "id": 1, "name": "Travel", "value": 8 },
    { "id": 2, "name": "Restaurant", "value": 64 },
    { "id": 3, "name": "Bank", "value": 3 },
    { "id": 4, "name": "Movies", "value": 10 }
]

我尝试使用for循环来循环到数据集,但无法达到我的要求。

有什么帮助吗?

使用Array#forEachObject.keys()迭代对象。

var dataset = {
    "d0": { "id": 0, "name": "Housing", "value": 18 },
    "d1": { "id": 1, "name": "Travel", "value": 31.08 },
    "d2": { "id": 2, "name": "Restaurant", "value": 64 },
    "d3": { "id": 3, "name": "Bank", "value": 3 },
    "d4": { "id": 4, "name": "Movies", "value": 10 }
};
// Declare resulting empty array
var d = [];
// Get object keys and iterate over them
Object.keys(dataset).forEach(function (key) {
    // Get the value from the object
    var value = dataset[key].value;
    // Update values if in the range
    if(value >= 10 && value <= 20) {
        dataset[key].value = 7;
    } else if(value > 20 && value <= 40) {
        dataset[key].value = 8;
    }
    // Push the updated(or not) value in the array
    d.push(dataset[key]);
});
console.log(d);
document.getElementById('result').innerHTML = JSON.stringify(d, null, 4);
<pre id="result"></pre>

只需使用Array.prototype.map方法进行映射即可:

var dataset = {
    "d0": { "id": 0, "name": "Housing", "value": 18 },
    "d1": { "id": 1, "name": "Travel", "value": 31.08 },
    "d2": { "id": 2, "name": "Restaurant", "value": 64 },
    "d3": { "id": 3, "name": "Bank", "value": 3 },
    "d4": { "id": 4, "name": "Movies", "value": 10 }
};
var d = Object.keys(dataset).map(function(key) {
    var obj = dataset[key];
    if (obj.value >= 10 && obj.value <= 20) {
        obj.value = 7;
    }
    else if (obj.value >= 20 && obj.value <= 40) {
        obj.value = 8;
    }
    return obj;
});
document.write('<pre>' + JSON.stringify(d, null, 4) + '</pre>');

您可以这样做:

var dataset = {
        "d0": { "id": 0, "name": "Housing", "value": 18 },
        "d1": { "id": 1, "name": "Travel", "value": 31.08 },
        "d2": { "id": 2, "name": "Restaurant", "value": 64 },
        "d3": { "id": 3, "name": "Bank", "value": 3 },
        "d4": { "id": 4, "name": "Movies", "value": 10 }
    };

首先删除字符串键:

var d = [];
for(var k in dataset){
    d.push(dataset[k]);
}

然后迭代得到的数组,相应地修改它:

for(var k in d){
    var value = d[k]['value'];
    if(value>=10 && value<=20){
        d[k].value=7;
    }
    if(value>=20 && value<=40){
        d[k].value=8;
    }
}

这提供了您要查找的结果:

var dataset = {
    "d0": { "id": 0, "name": "Housing", "value": 18 },
    "d1": { "id": 1, "name": "Travel", "value": 31.08 },
    "d2": { "id": 2, "name": "Restaurant", "value": 64 },
    "d3": { "id": 3, "name": "Bank", "value": 3 },
    "d4": { "id": 4, "name": "Movies", "value": 10 }
};
var d = Object.keys(dataset).map(function(key) {
    var v = dataset[key].value;
    if (v >= 10 && v <= 20) dataset[key].value = 7;
    else if (v > 20 && v <= 40) dataset[key].value = 8;
    return dataset[key];
});

试试这个,

function datasetToArrOfObj(dataset){
    var rslt = [];
    for (var key in dataset) {
      if (dataset.hasOwnProperty(key)) {
         rslt.push(dataset[key]);
      }
    }
return rslt;    
}