使用JavaScript将对象值替换为具有相同键的其他对象'
Replace object value with other object's value of the same key with JavaScript
我有两个对象,item
和results
。它们都有相同的键,但可能有不同的值,例如:
item.id = '50'
item.area = 'Mexico'
item.gender = null
item.birthdate = null
results.id = '50'
results.area = null
results.gender = 'Male'
results.birthdate = null
我想做的就是:
if (item.id == null || items.id == 0)
{
item.id = results.id;
}
但是我正在寻找一种方法来为我的item
对象的每个值做到这一点。你知道,如果我的对象碰巧有很多键/值,你不必写一个庞大的函数。什么好主意吗?
Update:我误解了我自己的问题,唯一的问题是我没有真正理解如何获得给定某个键的对象值。我真的不能使用任何外部脚本或div,因为我使用Azure的移动服务脚本。
for (var key in item) {
if(item[key] == null || item[key] == 0){
item[key] = results[0][key]
}
}
可以成功!
var item = {};
var results={};
item.id = '50'
item.area = 'Mexico'
item.gender = null
item.birthdate = null
results.id = '50'
results.area = null
results.gender = 'Male'
results.birthdate = null
Object.keys(item).forEach(function(key) {
if (item[key] == null || item[key] == 0) {
item[key] = results[key];
}
})
document.getElementById('dbg').innerHTML ='<pre>' + JSON.stringify(item , null , ' ') + '</pre>';
console.dir(item);
<div id='dbg'></div>
您可以优雅地使用lodash:
var results = {};
var item = {};
item.id = '50';
item.area = 'Mexico';
item.gender = null;
item.birthdate = null;
results.id = '50';
results.area = null;
results.gender = 'Male';
results.birthdate = null;
_.merge(results, _.pick(item, _.identity));
alert(JSON.stringify(results));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>
注意,请求的值现在在results中(而不是item中)。如果您仍然需要该项,请将这些值克隆到一个新变量中并使用它。
您可以像这样遍历对象。hasOwnProperty测试它是否是由您定义的属性,而不是来自基对象定义。
for (var key in item) {
if (item.hasOwnProperty(key)) {
if (item[key] == null) {
item[key] = results[key];
}
}
}
旧的帖子,但如果你搜索一个更直接的解决方案,你可以尝试Object.assign()。如果目标对象中的属性具有相同的键,则目标对象中的属性将被源中的属性覆盖。
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }
console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }
您也可以使用空合并运算符来简化它。
var item = {
id: '50',
area: 'Mexico',
gender: null,
birthdate: null
};
var results={
id: '50',
area: null,
gender: 'Male',
birthdate: null
};
Object.keys(item).forEach(function(key) {
item[key] = item[key] ?? results[key];
})
document.getElementById('dbg').innerHTML ='<pre>' + JSON.stringify(item , null , ' ') + '</pre>';
console.dir(item);
<div id='dbg'></div>
对于单行代码,这里有一个选项:
{ ...item, ...Object.keys(results).reduce((pv, cv) => results[cv] == null ? pv : { ...pv, [cv]: results[cv] }, {}) };
您可以迭代所有对象键,然后在每个项上编写赋值:
for (var property in results) {
if (results.hasOwnProperty(property) && !item[property]) {
// do stuff
item[property] = results[property]
}
}
相关文章:
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 使用同一对象中的其他变量声明变量
- 别名或以其他方式合并两个具有不同名称的相同对象原型
- 如何使用object.assign()从其他对象引用基本对象属性
- 对象获胜'如果qml中的其他地方定义了数字动画属性,则t设置动画
- 如何使用其他地方指定的访问信息访问嵌套的json对象,而不使用eval或迭代
- 对象数组-与其他列数据相比,增加一列
- PJAX:记住其他对象状态
- 以编程方式将fabric-js-canvas的图像替换为hq图像,并重新计算其他对象的坐标和大小
- AngularJS:根据其他对象预先选择ng repeat中的select元素
- 如何在 JavaScript 中访问函数中的其他属性值作为对象属性值
- 如何在 Javascript 中向数组添加其他对象
- 追加子数据 URI,替换 IE 中的其他对象
- 将 JavaScript 对象转换为其他格式
- 挖空、视图模型位于其他对象和数据绑定中
- 如何从帖子对象添加其他信息以在护照中注册用户
- getList 的响应应该是一个数组,而不是一个对象或其他东西
- 函数中的If语句会创建其他对象
- 如何在 javascript 中将变量传递给对象内的其他函数
- 将JSON对象转换为敲除observable在IE8中不起作用,但在所有其他浏览器中都起作用