首页 > 解决方案 > 如何从 json 根属性中仅获取非数组值

问题描述

如何以编程方式仅从 Javascript 中的 JSON 对象的根中获取非数组值的键/值?

// sample input
{
    name: "Jackie",
    age: 26,
    friends: [ "David", "Ashley" ],
    pets: [ "Rover" ],
    birthday: "May 3",
    family: [
        {
            name: "Lily",
            relationship: "Mother"
        },
        {
            name: "Richard",
            relationship: "Father"
        }
    ]
}
// expected output
{
    name: "Jackie",
    age: 26,
    birthday: "May 3"
}

标签: javascriptjson

解决方案


您对此有何看法:

 Object.fromEntries(Object.entries(obj).filter( ([k,v]) => Object(v) !== v )) 

此过期将过滤掉每个具有对象值的键。当然,您可以根据需要自定义此过滤器

 Object.fromEntries(Object.entries(obj).filter( ([k,v]) => !Array.isArray(v) )) 

或者可能像@bramer 建议的那样,但正在修改原始 obj

for ( let k in obj )
  if ( Array.isArray(obj[k]) delete obj[k]

可以包装返回新的obj

function justPrimitive( obj, ret = {} ) 
 for ( let k in obj )
   if ( ! Array.isArray(obj[k]) ret[k] = obj[k]
 return ret;
}

推荐阅读