我有一个带有一些嵌套对象的对象,我想扩展该对象,在某些情况下,嵌套对象将返回为空,尽管我想保留它们 - 有人可以推荐我如何做到这一点吗? p>
byte[]
找到了这个有用的插件https://www.npmjs.com/package/deepmerge
答案 0 :(得分:2)
您可以使用Lodash的_.merge()
方法。
let myObject = {
id: 1,
configs: {
track: true,
pulse: false
},
name: 'slider',
position: 1
}
var update = _.merge({}, myObject, {
name: 'scroller',
configs: {}
})
console.log(update)

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
&#13;
答案 1 :(得分:1)
let myObject = {
id: 1,
configs: {
track: true,
pulse: false
},
name: 'slider',
position: 1
}
let updatedObject = shallowAssignNonEmptyProperties(Object.assign({}, myObject), {
name: 'scroller',
configs: {}
}))
function shallowAssignNonEmptyProperties(target, source) {
for (const prop in source) {
const newValue = source[prop]
if (typeof newValue !== 'object' || Object.keys(newValue).length) {
target[prop] = newValue
}
}
}
如果我们想跳过特定属性,Object.assign()
或object spread
将无效。如果你想提出一个解决方案,它需要迭代属性,检查它们的类型,并决定是否要分配该值。
typeof newValue !== 'object'
:我们让传递除对象以外的值; Object.keys(newValue).length
:检查对象是否为空或具有任何属性; 这个很简单,虽然如果你需要深度赋值/合并,你将使用lib(lodash)或递归调用这个函数。这取决于你。
答案 2 :(得分:0)
嵌套属性按原样使用,不会递归分配/合并它们。所以public class DateDeserializer implements JsonDeserializer<Date> {
public Date deserialize(JsonElement element, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
String date = element.getAsString();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ'");
format.setTimeZone(TimeZone.getTimeZone("GMT"));
try {
return format.parse(date);
} catch (ParseException exp) {
System.out.println("Failed to parse Date:"+ exp);
return null;
}}}
对象取自configs
调用的最后一个参数(这是一个空对象),并完全覆盖了之前的值。