JavaScriptES6-只获取嵌套JSON数组的某些键/部分的简洁方法?
我有一个JSON数据数组,它存储在我的应用程序状态中。它包括详细页面所需的属性(大约10个不同的字段) 我的列表视图只需要其中两个。例如:JavaScriptES6-只获取嵌套JSON数组的某些键/部分的简洁方法?,javascript,ecmascript-6,redux,Javascript,Ecmascript 6,Redux,我有一个JSON数据数组,它存储在我的应用程序状态中。它包括详细页面所需的属性(大约10个不同的字段) 我的列表视图只需要其中两个。例如: [ { "id": 1, "title": 'Derp', "subtitle: 'Derp', "another": 'Derp, //... more attributes }, { "id": 2, // ... etc } ] 我的列表视图只关注id、标题和副标题。获取相同数据
[
{
"id": 1,
"title": 'Derp',
"subtitle: 'Derp',
"another": 'Derp,
//... more attributes
},
{
"id": 2,
// ... etc
}
]
我的列表视图只关注id、标题和副标题。获取相同数据的最简洁的方法是什么,但只使用我指定的键
我应该用地图吗?还是解构
编辑:非常感谢你的回答,尽管警察已经尽力了。这对我帮助很大,我确实花了一段时间想知道如何做到这一点。我来自Ruby,所以ES6不是我的专长
用例是仅从包含所有数据属性的全局Redux存储返回React组件所需的内容。例如,我的列表视图只需要JSON数据的2/3属性。我正在使用redux来做这件事
第二个/发帖问题:这种类型的方法是否有名称,其中您只获取JSON的一部分?我想在redux选择器中创建一个这样做的方法,我需要给出一个名称。我想把它称为reducer,但这不太管用,因为Redux世界中的reducer一词已经用于修改状态的方法。您可以使用解构和重构的对象映射值 : destructuring assignment语法是一个JavaScript表达式,它可以将数组中的值或对象中的属性解压缩到不同的变量中
var a, b;
({a, b} = {a: 10, b: 20});
console.log(a); // 10
console.log(b); // 20
var data=[{id:1,标题:'Derp',副标题:'Derp',另一个:'Derp',bla:42},{id:2,标题:'Derp',副标题:'Derp',另一个:'Derp',bla:42}],
short=data.map({id,title,subtitle})=>({id,title,subtitle}));
控制台日志(短)代码>如果你真的有,那么一个简洁的方法就是使用一个恢复器
const j='[{id:1,“title”:“Derp”,“subtitle”:“Derp”,“other”:“Derp”},{id:2,“title”:“Derp”,“subtitle”:“Derp”,“other”:“Derp”}];
常量w=['id','title','subtitle'];
const o=JSON.parse(j,(k,v)=>(v&&typeof v==='object'?v:(w.some(i=>i==k)?v:void 0));
控制台日志(o)代码>啊。我看到了一个类似的stackoverflow帖子,但无法将示例放在一起。这就更清楚了!Aww,FWIW:重构不能像({x.id,x.title,…})那样工作。(C#与anon类型有一个类似的功能,它将提取“.”后面的位作为字段名..而不是ES6的工作方式。)@user2864740,您可以使用嵌套的方法进行解构,如({x:{id,title})
。顺便说一句,请参阅Meta post。我们不应该鼓励人们在解决问题时表现出很少或根本没有努力的问题。@gregblass,我添加了neede操作的正确术语。您有或有对象数组吗?@Xotic750抱歉,但我不太确定其中的区别。是JSON文件吗?这就是密码?你能告诉我吗?@Xotic750对我来说两个都像?我想了解其中的区别。始终是序列化对象的字符串或原语。如果它是.json
文件,则它只是格式化的json。我假设您正在nodejs上执行此操作?这意味着您无需解析文件,因为当您require
或import
时,您只需在代码中获得一个对象数组。因此,您可以像@NinaScholz所示那样访问它。:)
var a = 'foo', b = 42, c = {};
var o = {a, b, c};
var ele = [
{
"id": 1,
"title": 'Derp',
"subtitle": 'Derp',
"another": 'Derp'
},
{
"id": 2,
"title": 'Derp',
"subtitle": 'Derp',
"another": 'Derp'
}
]
console.log(ele.map(({id, title, subtitle}) =>
({id, title, subtitle}) ) )