问题陈述:我有一个JSON对象,其中包含n
个属性。我需要将这个JSON对象的一些属性作为JSON字符串传递给服务器。
尝试:我使用Object.defineProperty()方法将enumerable
作为false
的对象属性,我不想在JSON string
中传递1}}。请在下面的代码段中找到更清晰的图片。
var jsonObj = {
"name": "Rohit",
"age": 27,
"city": "Gurgaon"
};
Object.defineProperty(jsonObj, 'name', {
enumerable: false
});
console.log(JSON.stringify(jsonObj));
上述代码面临的问题:
假设我在对象中有100
个属性,并且我只想将20
属性传递给100
以外的服务器。然后我必须在下面的代码行80
写下来删除不需要的属性,它将影响应用程序的性能。
Object.defineProperty(jsonObj, 'name', { enumerable: false });
我也调查了有关SO的问题,但没有找到任何合适的答案来解决这个问题。
有没有更好的方法来实现这一目标?
答案 0 :(得分:1)
始终可以选择创建新对象并仅提取所需的键。请参阅One-liner to take some properties from object in ES 6。
JSON.stringify
接受“replacer”函数作为第二个参数。这允许您在序列化期间更改值,包括将其过滤掉。假设您要保留的属性较少,则应列出数组或Set
中的属性。
var jsonObj = {
"name": "Rohit",
"age": 27,
"city": "Gurgaon"
};
var toKeep = ['age', 'city'];
console.log(JSON.stringify(
jsonObj,
(key, value) => !key || toKeep.indexOf(key) > -1 ? value : undefined,
));
答案 1 :(得分:0)
var jsonObj = {
"name": "Rohit",
"age": 27,
"city": "Gurgaon"
};
var newObj = jsonObj;
var arr = ["name","age"];
for(var i=0;i<arr.length;i++){
delete newObj[arr[i]]
}
console.log(newObj);
这可以解决我的问题。
答案 2 :(得分:0)
尝试以下操作,它不会修改原始对象:
var jsonObj = {
"name": "Rohit",
"age": 27,
"city": "Gurgaon"
};
var storePropeties = ["city"];
var result = Object.keys(jsonObj).reduce(function (obj, key) {
if(storePropeties.includes(key))
obj[key] = jsonObj[key];
return obj
}, {})
console.log(result);
答案 3 :(得分:0)
您应该创建一个要发送给服务器的新对象
我的解决方案:
SELECT * FROM edu_tb
INNER JOIN master_tb ON
master_tb.`master_id` = edu_tb.`master_id`
INNER JOIN exp_tb ON
master_tb.`master_id` = exp_tb.`master_id`
INNER JOIN certi_tb ON
master_tb.`master_id` = certi_tb.`master_id`