json和数组的转换

{other:1}=>[{name:"other",value:1}]
现在想实现上面的这种转换,求大神指点下

阅读 2.4k
4 个回答
const obj = {other:1};

const array = [];
Object.keys(obj).forEach((item, idx) => {
    array.push([{
        name: item,
        value: Object.values(obj)[idx]
    }]);
});

console.log(array);
var a = {other: 1};

var b = Object.keys(a).map(function(item) {
    return {
        name: item,
        value: a[item]
    }
})

console.log(b)

首先这玩意儿不叫JSONJSON是JavaScript Object Notation的缩写,{ key: value }就是一个普通的对象(object)。你会问这个问题说明你对js不熟悉,因此我猜测你这个需求很可能是没有必要的,你不妨说说你为什么要做这个转换,想遍历一个对象的所有键值对可以用for-in遍历。回到这个问题本身,用最新的语法可以这么写:

let obj = { other: 1 }

let entries = Object.keys(obj).map(key => { name: key, value: obj[key] })

实际上,新的提案中有个Object.entries方法,使用方法参见MDN文档,用这个函数你也能获取到一个数组,但长成这样:[ [ 'other', 1 ] ],这个数组的一个元素称为一个entry,一个entry也是一个数组,这个数组的第一个元素是对象的一个键(对应于你的结构的name),第二个元素是这个对象的这个键对应的值(对应于你的结构的value),你想要把entries转成你那种格式可以这样:

let obj = { other: 1 }

let entries = Object.entries(obj).map(entry => { name: entry[0], value: entry[1] })

但是一般没有这个必要,直接使用Object.entries的结果即可。

const obj = {other:1};

let newObj = Object.keys(obj).reduce((arr,item)=>{
     return (arr.push({
         name: item,
         value: obj[item]
     }),arr)
},[])

console.log(newObj)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题