如何解决如何在JavaScript中按键值类型更改嵌套对象数组
我想知道如何在javascript中修改对象数组。
即obj为value
为数组时,将value
键数组更改为字符串
将value
为字符串时,将value
键字符串更改为数组
此外,如何在javascript中将输出转换为输入obj
和(反之亦然-
function newObject(obj){
var result = obj.map(e=>typeof e.value === "string" ?
{...e,value: [e.value] } :
e.value.map(value => ({...e,value}))
).flat()
console.log(result);
return result;
}
scenario1
input:
obj =[
{ id: 0,key: "s1",value: ["listA","listB"],img:"" },{ id: 1,key: "s2",value: ["listC"],img: "" },{ id: 2,key: "s3",value: ["listD","listE","listF"],img: "" }
]
Expected output:
[
{ id: 0,value: "listA,listB",img:""},value: "listC",value: "listD,listE,listF",img:""}
]
场景2
input
[
{ id: 0,img:""}
]
Expected Output
[
{ id: 0,img: "" }
]
解决方法
使用.map()
时,可以返回具有当前对象(...o
)的所有属性和值的新对象,以及更新的value
属性。更新值属性将检查o.value
是否为数组(使用Array.isArray
检查),如果为数组,则将.join()
元素转换为字符串,即为字符串(即:not数组),它将用逗号.split()
(将其转换为数组)。
请参见以下示例:
function newObject(arr){
return arr.map(o => ({
...o,value: Array.isArray(o.value) ? o.value.join() : o.value.split(',')
}));
}
const arr1 = [ { id: 0,key: "s1",value: ["listA","listB"],img:"" },{ id: 1,key: "s2",value: ["listC"],img: "" },{ id: 2,key: "s3",value: ["listD","listE","listF"],img: "" } ];
const arr2 = [ { id: 0,value: "listA,listB",img:""},value: "listC",value: "listD,listE,listF",img:""} ];
const res1 = newObject(arr1);
const res2 = newObject(arr2);
console.log(res1);
console.log(res2);
,
我们可以使用for循环来获得更高的性能
let arr_1 = [
{ id: 0,{ id: 0,img:""}
]
const f = (arr) => {
for(let i = 0; i < arr.length; i++) {
let x = arr[i].value
arr[i].value = Array.isArray(x) ? x.join() : x.split(',')
}
console.log(arr)
}
f(arr_1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。