使用特定的JSON键值对创建数组

dem*_*123 7 javascript arrays json

假设我有一个像这样的JSON数组

[{"name":"Lenovo Thinkpad 41A4298","website":"google"},
{"name":"Lenovo Thinkpad 41A2222","website":"google"},
{"name":"Lenovo Thinkpad 41Awww33","website":"yahoo"},
{"name":"Lenovo Thinkpad 41A424448","website":"google"},
{"name":"Lenovo Thinkpad 41A429rr8","website":"ebay"},
{"name":"Lenovo Thinkpad 41A429ff8","website":"ebay"},
{"name":"Lenovo Thinkpad 41A429ss8","website":"rediff"},
{"name":"Lenovo Thinkpad 41A429sg8","website":"yahoo"}]
Run Code Online (Sandbox Code Playgroud)

我想获得一个值等于的所有names 的数组.websitegoogle

首先,过滤JSON阵列为只包含其中的条目website就是google,我有这样的:

var data_filter = data.filter( element => element.website =="google");
console.log(data_filter);
Run Code Online (Sandbox Code Playgroud)

得出以下结果:

[{"name":"Lenovo Thinkpad 41A4298","website":"google"},
    {"name":"Lenovo Thinkpad 41A2222","website":"google"},
    {"name":"Lenovo Thinkpad 41A424448","website":"google"}]
Run Code Online (Sandbox Code Playgroud)

接下来我需要做什么来获得name一个单独的数组.我试过这样做:

let new_array = [];
  new_array.push(data_filter.body.name)
Run Code Online (Sandbox Code Playgroud)

这给了我一个未定义的错误name.我也尝试过:

new_array.push(data_filter.name)
  new_array.push(data_filter.body[0].name)
Run Code Online (Sandbox Code Playgroud)

但这些方法都不起作用.我在这里错过了什么?

仅供参考 - JSON数据和过滤方法在此SO 帖子中提及- OP和答案.

Hri*_*dov 9

你需要使用双等号来比较==而不是单一=.如果是单身,则更改(分配)element.website"google".该表达式的结果是您设置的值"google",它是一个真值,因此所有元素都通过了测试filter().

var data = [{"name":"Lenovo Thinkpad 41A4298","website":"google"},
{"name":"Lenovo Thinkpad 41A2222","website":"google"},
{"name":"Lenovo Thinkpad 41Awww33","website":"yahoo"},
{"name":"Lenovo Thinkpad 41A424448","website":"google"},
{"name":"Lenovo Thinkpad 41A429rr8","website":"ebay"},
{"name":"Lenovo Thinkpad 41A429ff8","website":"ebay"},
{"name":"Lenovo Thinkpad 41A429ss8","website":"rediff"},
{"name":"Lenovo Thinkpad 41A429sg8","website":"yahoo"}];

var data_filter = data.filter( element => element.website == "google");

var names = data_filter.map(function (elem) {
  return elem.name;
});
console.log(names);
Run Code Online (Sandbox Code Playgroud)

要在过滤结果后获取名称,请使用map().

您的代码无效,因为您尝试访问body已过滤结果的属性.过滤结果包含原始结果的数组,但仅包含通过测试的条目.由于您的原始条目没有body属性,因此过滤后的结果也不会有.而且,你尝试过data_filter.body永远不存在的东西,因为它data_filter总是一个数组而数组没有body属性.

了解更多关于filter() 这里.