将对象名称添加到对象内部的字段
Add object name to field inside object
假设我有一个看起来像这样的对象
const randomObj = {
myObj: { id: "1", value: "random string", text: "random text"},
otherObj: { id: "2", value: "random string 2", text: "random text 2"}
}
我想遍历每个对象及其值,但要向对象添加一个附加字段
const newObj = { ..._.mapValues(randomObj) }
预期输出
newObj: {
myObj: { id: "1", value: "random string", text: "random text"},
otherObj: { id: "2", value: "random string 2", text: "random text 2"},
}
期望的输出
newObj: {
myObj: { id: "1", value: "random string", text: "random text", objectId: "myObj"},
otherObj: { id: "2", value: "random string 2", text: "random text 2", objectId: "otherObj"},
}
如何添加附加字段,其中附加字段是对象的名称?
_.mapValues()
iteratee 以 属性 的值作为第一个参数,键作为第二个参数,整个对象作为第三个参数。使用对象传播创建一个新对象,键为 objectId
.
const randomObj = {
myObj: { id: "1", value: "random string", text: "random text"},
otherObj: { id: "2", value: "random string 2", text: "random text 2"}
}
const newObj = _.mapValues(randomObj, (v, k) => ({
...v,
objectId: k
}))
console.log(newObj)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous"></script>
如果没有 lodash,您可以使用 Object.entries()
将对象转换为 [key, value]
对数组,映射对,然后使用 Object.fromEntries()
将对数组转换回对象.
const randomObj = {
myObj: { id: "1", value: "random string", text: "random text"},
otherObj: { id: "2", value: "random string 2", text: "random text 2"}
}
const newObj = Object.fromEntries(
Object.entries(randomObj)
.map(([k ,v]) => [k, {
...v,
objectId: k
}])
)
console.log(newObj)
const randomObj = {
myObj: { id: "1", value: "random string", text: "random text"},
otherObj: { id: "2", value: "random string 2", text: "random text 2"}
}
Object.keys(randomObj).forEach(key => randomObj[key].objectId = key);
console.log(randomObj);
使用本地方法 Object.entries() 和 Array#reduce() 与使用 lodash
一样简单
const randomObj = {
myObj: { id: "1", value: "random string", text: "random text"},
otherObj: { id: "2", value: "random string 2", text: "random text 2"}
},
res = Object.entries(randomObj).reduce((a,[k,v])=>(a[k] = {...v, objectId:k},a),{})
console.log(res)
假设我有一个看起来像这样的对象
const randomObj = {
myObj: { id: "1", value: "random string", text: "random text"},
otherObj: { id: "2", value: "random string 2", text: "random text 2"}
}
我想遍历每个对象及其值,但要向对象添加一个附加字段
const newObj = { ..._.mapValues(randomObj) }
预期输出
newObj: {
myObj: { id: "1", value: "random string", text: "random text"},
otherObj: { id: "2", value: "random string 2", text: "random text 2"},
}
期望的输出
newObj: {
myObj: { id: "1", value: "random string", text: "random text", objectId: "myObj"},
otherObj: { id: "2", value: "random string 2", text: "random text 2", objectId: "otherObj"},
}
如何添加附加字段,其中附加字段是对象的名称?
_.mapValues()
iteratee 以 属性 的值作为第一个参数,键作为第二个参数,整个对象作为第三个参数。使用对象传播创建一个新对象,键为 objectId
.
const randomObj = {
myObj: { id: "1", value: "random string", text: "random text"},
otherObj: { id: "2", value: "random string 2", text: "random text 2"}
}
const newObj = _.mapValues(randomObj, (v, k) => ({
...v,
objectId: k
}))
console.log(newObj)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous"></script>
如果没有 lodash,您可以使用 Object.entries()
将对象转换为 [key, value]
对数组,映射对,然后使用 Object.fromEntries()
将对数组转换回对象.
const randomObj = {
myObj: { id: "1", value: "random string", text: "random text"},
otherObj: { id: "2", value: "random string 2", text: "random text 2"}
}
const newObj = Object.fromEntries(
Object.entries(randomObj)
.map(([k ,v]) => [k, {
...v,
objectId: k
}])
)
console.log(newObj)
const randomObj = {
myObj: { id: "1", value: "random string", text: "random text"},
otherObj: { id: "2", value: "random string 2", text: "random text 2"}
}
Object.keys(randomObj).forEach(key => randomObj[key].objectId = key);
console.log(randomObj);
使用本地方法 Object.entries() 和 Array#reduce() 与使用 lodash
一样简单const randomObj = {
myObj: { id: "1", value: "random string", text: "random text"},
otherObj: { id: "2", value: "random string 2", text: "random text 2"}
},
res = Object.entries(randomObj).reduce((a,[k,v])=>(a[k] = {...v, objectId:k},a),{})
console.log(res)