就地修改对象javascript
Modifying object in place javascript
我有一个看起来像这样的对象:
var serviceData = {};
serviceData.energy = {commission:15.00, retention:0.00, conversion:0.099, renewal: false, offset:0, rental: true}
serviceData.homeMedia = {commission:20.00, retention:0.00, conversion:0.02, renewal: false, offset:0, rental: true}
serviceData.removal = {commission:4.00, retention:0.00, conversion:0.05, renewal: false, offset:2, rental: true}
serviceData.storage = {commission:6.00, retention:0.09, conversion:0.01, renewal: true, offset:2, rental: true}
serviceData.homeContents = {commission:50.00, retention:0.55, conversion:0.40, renewal: true, offset:0, rental: false}
我想在serviceData
上循环,如果项的属性rental
为false,我想从serviceData
中删除该项,而不实际修改serviceData
对象。换句话说,创建一个新对象,减去"已删除"项。
我该怎么做???
只需迭代对象键,并只在新对象中设置所需的键:
var serviceData = {};
serviceData.energy = {commission:15.00, retention:0.00, conversion:0.099, renewal: false, offset:0, rental: true}
serviceData.homeMedia = {commission:20.00, retention:0.00, conversion:0.02, renewal: false, offset:0, rental: true}
serviceData.removal = {commission:4.00, retention:0.00, conversion:0.05, renewal: false, offset:2, rental: true}
serviceData.storage = {commission:6.00, retention:0.09, conversion:0.01, renewal: true, offset:2, rental: true}
serviceData.homeContents = {commission:50.00, retention:0.55, conversion:0.40, renewal: true, offset:0, rental: false}
var filtered = {};
for(var key in serviceData) {
if(serviceData[key].rental) {
filtered[key] = serviceData[key];
}
}
document.write(JSON.stringify(filtered, ''n'));
请注意,新对象指向相同的项("子对象"),这是一个浅层副本。
首先Object.assign(...)
复制整个对象,然后使用"filter"函数根据规则对条目进行排序。
或者使用map
函数根据规则返回值,然后使用"filter"对所有null
条目进行排序。
作为一个有起点的提示…
我喜欢使用lodash库进行奇怪的操作:)
var newObj = _.omit(serviceData, function(property) {
return !property.rental;
});
您可以使用for-in
循环,并使用false
租金忽略项目的密钥。
function copyData(obj, ignoreKey) {
var copiedObj = {};
for (var key in obj) {
if (key === ignoreKey) {
continue;
}
copiedObj[key] = obj[key];
}
return copiedObj;
}
var newObject = copyObj(serviceData, 'homeContents');
您可以使用jquery每个方法:
var res={};
$.each(serviceData, function( index ) {
if(serviceData[index].rental)
res[index] = serviceData[index]
})
笔
相关文章:
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 循环遍历以数组为值的Javascript对象
- 从ajax请求中获取javascript对象
- 如何从对象的原型方法访问JavaScript对象属性
- 将XML转换为普通的旧JavaScript对象
- 通过引用传递JavaScript对象
- javascript对象操作:根据指定条件选择属性
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 如何在异步函数中使用javascript对象
- 临时Javascript对象
- 如何在ASP中为用户控件添加Javascript对象网
- 使用数组向下搜索Javascript对象
- Rails将JavaScript对象存储到Model的有效方式
- JavaScript对象不是从原型链继承的
- 如何创建具有默认值的JavaScript对象字段?(AngularJS模型相关)
- SetInterval在javascript对象中表现怪异
- Javascript 对象和 this 关键字
- 如何在不知道关键字的情况下访问javascript对象值
- 在 JavaScript 对象中设置要使用的运算符的属性
- 如何搜索JavaScript对象并更改值