javascript nested object merge

时间:2023-03-09 09:40:34
javascript nested object merge

javascript nested object merge

javascript nested object merge

deep copy

Object reference type


function namespace(oNamespace, sPackage) {
// deep copy
let res = oNamespace;
const arr = sPackage.split(".");
//  ["a", "b", "c", "d"]
const len = arr.length;
for(let key of arr){
if(key in oNamespace){
if(typeof oNamespace[key] !== "object"){
oNamespace[key] = {};
} else {
// except
}
} else {
oNamespace[key] = {};
}
// ? 引用类型
oNamespace = oNamespace[key];
console.log(`\noNamespace ${key}`, JSON.stringify(oNamespace))
console.log(`res`, JSON.stringify(res))
// console.log(`oNamespace ${key}`, oNamespace)
// console.log(`\nres`, res)
}
console.log(`\noNamespace`, oNamespace)
console.log(`result =`, JSON.stringify(res))
return res;
} // namespace({a: {test: 1, b: 2}}, 'a.b.c.d') /* // oNamespace a {"test":1,"b":2}
// res {"a":{"test":1,"b":2}} // oNamespace b {}
// res {"a":{"test":1,"b":{}}} // oNamespace c {}
// res {"a":{"test":1,"b":{"c":{}}}} // oNamespace d {}
// res {"a":{"test":1,"b":{"c":{"d":{}}}}} // oNamespace {}
// result = {"a":{"test":1,"b":{"c":{"d":{}}}}} */

shallow copy bug

Object.assign / {...obj, ...obj2}


function namespace(oNamespace, sPackage) {
const arr = sPackage.split(`.`).reverse();
// const arr = 'a.b.c.d'.split(`.`).reverse();
let obj = {};
for(let k of arr) {
obj = {[k]: obj}
}
// shallow copy bug
return Object.assign(oNamespace, obj);
// return obj;
}

function namespace(oNamespace, sPackage) {
const arr = sPackage.split(`.`).reverse();
// const arr = 'a.b.c.d'.split(`.`).reverse();
let obj = {};
for(let k of arr) {
obj = {[k]: obj}
}
// shallow copy bug
return {...oNamespace, ...obj};
// return obj;
}

deep copy OK

// deep merge objects

function isObject(item) {
return (item && typeof item === 'object' && !Array.isArray(item));
} function mergeDeep(target, ...sources) {
if (!sources.length) return target;
const source = sources.shift();
if (isObject(target) && isObject(source)) {
for (const key in source) {
if (isObject(source[key])) {
if (!target[key]) Object.assign(target, { [key]: {} });
mergeDeep(target[key], source[key]);
} else {
Object.assign(target, { [key]: source[key] });
}
}
}
return mergeDeep(target, ...sources);
}


demo

function namespace(oNamespace, sPackage) {
const arr = sPackage.split(`.`).reverse();
// const arr = 'a.b.c.d'.split(`.`).reverse();
let obj = {};
for(let k of arr) {
obj = {[k]: obj}
}
return Object.assign({}, oNamespace, obj);
// return obj;
} obj = namespace({a: {test: 1, b: 2}}, 'a.b.c.d')
function namespace(oNamespace, sPackage) {
const arr = sPackage.split(`.`).reverse();
// const arr = 'a.b.c.d'.split(`.`).reverse();
let obj = {};
for(let k of arr) {
obj = {[k]: obj}
}
// return Object.assign({}, oNamespace, obj);
return obj;
}
undefined
obj = namespace({a: {test: 1, b: 2}}, 'a.b.c.d')

javascript nested object merge


refs

根据包名,在指定空间中创建对象

https://www.nowcoder.com/practice/a82e035501504cedbe881d08c824a381?tpId=2&&tqId=10854&rp=1&ru=/ta/front-end&qru=/ta/front-end/question-ranking

Returning Object Literals from Arrow Functions in JavaScript

https://github.com/lydiahallie/javascript-questions#98-whats-the-output

https://github.com/lydiahallie/javascript-questions/issues/220#issuecomment-523736303

javascript nested object merge

const getList = ([x, ...y]) => [x, y];
const getUser = user => { name: user.name; age: user.age; } const list = [1, 2, 3, 4];
const user = { name: "Lydia", age: 21 }; console.log(getList(list));
console.log(getUser(user));
// [1, Array(3)]
// undefined

https://mariusschulz.com/blog/returning-object-literals-from-arrow-functions-in-javascript

javascript nested object merge

https://*.com/questions/28770415/ecmascript-6-arrow-function-that-returns-an-object/57601889#57601889


javascript nested object merge

xgqfrms 2012-2020

www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!