如何从对象数组中提取键值

4

i have object of array like this:

var arr = [{id: 1, url: 'something'},{id: 2, url: 'something2'}];

我希望您能够输出如下结果:

我想要类似这样的输出:

[{id:1}, {id:2}]

感谢您的提前帮助。
3个回答

5

只需使用 Array#map 方法即可。

const arr = [{id: 1, url: 'something'},{id: 2, url: 'something2'}];
const mapped = arr.map(({id}) => ({ id }));

console.log(mapped);

简单来说

const arr = [{id: 1, url: 'something'},{id: 2, url: 'something2'}];
const mapped = arr.map(item => { return { id: item.id };});

console.log(mapped);


很棒的回答,Suren。你能告诉我它利用了哪些ES6语法吗? - undefined
如果第一个方法对你不起作用,你可以接受对象本身并在箭头函数内部使用 obj.id,而不是接受 {id}(对象解构)。 - undefined
不,它实际上运行得很好。而且我理解了左边的解构。但是为什么右边只有在括号中才能工作呢? ()=> { id } 和 ()=>({id}) 有什么区别? - undefined
@NathanielRink 如果没有括号,花括号被视为箭头函数的主体。 - undefined

3
你应该使用map函数来从对象数组中提取特定的键值。
var new_arr= arr.map(function (value, index, array) {

   return {"id": value.id}; 

});

1
你可以从回调函数中删除额外的两个参数,它们没有用处,只会使代码混乱。 - Federico klez Culloca

0
如果您可以修改原始数组,只需删除属性url

var arr = [{id: 1, url: 'something'},{id: 2, url: 'something2'}];
arr.forEach(o => delete o.url);
console.log(arr)


@FedericoklezCulloca 嗯,也许那个 JSON 是从 API 提供者那里接收到的,而 OP 想要清理那个对象。 - Ele
它仍然似乎相当牵强和不符惯用语。我的意思是,这是你看到问题时诚实地首先想到的吗?我并不是要轻视,我真诚地想知道。 - Federico klez Culloca
@FedericoklezCulloca 这是一个有效的方法,因为我们没有完整的上下文。OP只想根据他/她的问题删除该属性。 - Ele

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接