如何在 javascript 中获取输出 { a: 123, bcde: 4, f: 5, gh: 67, };
2022-01-07
90
const input = {
a: [1, 2, 3],
b: {
c: {
d: {
e: 4,
},
},
},
f: 5,
g: {
h: [6, 7],
},
};
const outPut = {
a: 123,
bcde: 4,
f: 5,
gh: 67,
};
const getAllKeysOfObject = (obj, key) => {
let tempKey = key;
let nextKey = ''
if (obj instanceof Object && Object.values(obj).length > 0) {
nextKey = Object.values(obj)[0]
tempKey += nextKey;
getAllKeysOfObject(obj[nextKey], nextKey)
} else {
return {key: tempKey, value: obj[nextKey]}
}
}
const getObject = (input) => {
let tempObj = {}
Object.keys(input).forEach(key => {
let value = input[key] //[1,2]
console.log(value)
if (Array.isArray(value)) {
let tempStr = ''
for(let i =0;i<value.length;i++) {
tempStr += value[i]
}
tempObj[key] = tempStr;
} else if (input[key] instanceof Object && Object.values(input[key]).length > 0) {
let newObj = getAllKeysOfObject(input[key], key)
tempObj[newObj.key] = newobj.value
} else {
tempObj[key] = input[key]
}
})
return tempObj
}
console.log(getObject(input))
如何在 javascript 中获取输出 { a: 123, bcde: 4, f: 5, gh: 67, };
上述代码未按预期工作,因为键工作正常,但嵌套对象获取失败。获取错误 Uncaught TypeError: 无法读取未定义的属性(读取'')"
JSFiddle 链接 https://jsfiddle.net/ankitg1602/5v2gp64r/49/
2个回答
您可以使用
reduce
方法创建递归函数,如果当前值不是对象,则将其添加到累加器参数,同时跟踪先前的键并将它们传递下去。
const input = {
a: [1, 2, 3],
b: {
c: {
d: {
e: 4,
},
},
},
f: 5,
g: {
h: [6, 7],
},
};
function getOutput(data, pk = '') {
return Object.entries(data).reduce((r, [k, v]) => {
const key = pk + k
if (typeof v === 'object' && !Array.isArray(v)) {
Object.assign(r, getOutput(v, key))
} else {
r[key] = Array.isArray(v) ? Number(v.join('')) : v
}
return r;
}, {})
}
console.log(getOutput(input))
Nenad Vracar
2022-01-07
您可以使用递归获取条目。
这种方法不需要交出最后的密钥。
const
getEntries = object => Object
.entries(object)
.flatMap(([k, v]) => v && typeof v === 'object' && !Array.isArray(v)
? getEntries(v).map(([l, r]) => [k + l, r])
: [[k, [].concat(v).join('')]]
),
input = { a: [1, 2, 3], b: { c: { d: { e: 4 } } }, f: 5, g: { h: [6, 7] } },
result = Object.fromEntries(getEntries(input));
console.log(result);
Nina Scholz
2022-01-07