根据键值从对象数组中提取所有值

6
如果我有一个如下所示的数组:
[{"matchedKey":"cuisineType","cuisineType":"Indian","group":"group"},
 {"matchedKey":"cuisineType","cuisineType":"Italian","group":"group"},
 {"matchedKey":"cuisineType","cuisineType":"Asian","group":"group"},
 {"matchedKey":"cuisineType","cuisineType":"Japanese","group":"group"},
 {"matchedKey":"cuisineType","cuisineType":"African","group":"group"}]

我该如何按照菜系类型进行排序?

我尝试使用了以下方法:

var result = array.find(obj => {
var go =  obj.cuisineType
console.log(String(obj.cuisineType))
})

然而,我无法弄清楚如何:

  1. 将其放入单个字符串中并使用命令将结果分隔(它们只是逐个打印到控制台)。

  2. 使用我刚刚生成的字符串,因为console.log(go)console.log(result)会打印'undefined'。

感谢您提前的帮助!我尝试了stackoverflow和其他建议,但没有太大的成功!

5个回答

5

最简单的方法是使用map()来构建一个菜系数组。然后您可以根据需要遍历它或从中构建字符串。

var arr = [{"matchedKey":"cuisineType","cuisineType":"Indian","group":"group"},
  {"matchedKey":"cuisineType","cuisineType":"Italian","group":"group"},
  {"matchedKey":"cuisineType","cuisineType":"Asian","group":"group"},
  {"matchedKey":"cuisineType","cuisineType":"Japanese","group":"group"},
  {"matchedKey":"cuisineType","cuisineType":"African","group":"group"}]

var cuisines = arr.map(function(el) {
  return el.cuisineType;
});

console.log(cuisines); // array
console.log(cuisines.join(', ')); // formatted string


更简短的写法是,在你的 map 函数中加入 el => el.cuisineType - Treycos
@Treycos 这是真的,但要小心箭头函数,因为它们在任何版本的IE中都无法工作。 - Rory McCrossan

4

您只需使用 .map() 方法按照菜系将其转换为新的数组。然后您可以对此数据进行任何操作:

var arr = [{"matchedKey":"cuisineType","cuisineType":"Indian","group":"group"},
  {"matchedKey":"cuisineType","cuisineType":"Italian","group":"group"},
  {"matchedKey":"cuisineType","cuisineType":"Asian","group":"group"},
  {"matchedKey":"cuisineType","cuisineType":"Japanese","group":"group"},
  {"matchedKey":"cuisineType","cuisineType":"African","group":"group"}];

var sortedArr = arr.map(e => e.cuisineType);
console.log(sortedArr);


2
使用map函数。

const cuisineTypes = [{
    "matchedKey": "cuisineType",
    "cuisineType": "Indian",
    "group": "group"
  },
  {
    "matchedKey": "cuisineType",
    "cuisineType": "Italian",
    "group": "group"
  },
  {
    "matchedKey": "cuisineType",
    "cuisineType": "Asian",
    "group": "group"
  },
  {
    "matchedKey": "cuisineType",
    "cuisineType": "Japanese",
    "group": "group"
  },
  {
    "matchedKey": "cuisineType",
    "cuisineType": "African",
    "group": "group"
  }
];

const result = cuisineTypes.map(x => x.cuisineType);

console.log(JSON.stringify(result, null, 4));


2

如果你是初学JavaScript但之前使用过其他编程语言,这可能是解决当前难题的一种较为简单(但不高效)的方式。我已经为了易读性和理解每个步骤而写下了JavaScript代码,并添加了适当的注释。

/****** COMMENT *******
Declaring the original array as arr
*********************/

var arr = [
        {
         matchedKey:"cuisineType",
         cuisineType:"Indian",
         group:"group"
        },

        {
            matchedKey:"cuisineType",
            cuisineType:"Italian",
            group:"group"
        },

        {
            matchedKey:"cuisineType",
            cuisineType:"Asian",
            group:"group"
        },

        {
            matchedKey:"cuisineType",
            cuisineType:"Japanese",
            group:"group"
        },

        {
            matchedKey:"cuisineType",
            cuisineType:"African",
            group:"group"
        }
     ];

/****** COMMENT *******
Declaring a new empty array
*******************/

var newArray = [];

/****** COMMENT *******
array.push() method adds one or more elements to the end of an array.
So, I'm appending values of key - cuisineType - in the empty array named newArray (see above).
*******************/

for (var i = 0; i < arr.length; i++){

/****** COMMENT *******
Through this for loop, 'i' will point as index value to each individual object within an array starting from 0 up to the (length of an array - 1) ==> in your case, 5 - 1 = 4.
*******************/

newArray.push(arr[i].cuisineType);

}

/****** COMMENT *******
join() method creates and returns a new string by concatenating all of the elements in an array
*******************/

console.log(newArray.join(', '));

你的控制台日志输出将是:
Indian, Italian, Asian, Japanese, African

希望这正是您所寻找的。祝您拥有愉快的一天。

0

用一点 ES6:

  function extractArrayFromKey(ArrayOfObjects,WantedKey){
     return ArrayOfObjects(obj => {
       let val = null;
       Object.entries(obj).forEach(([key,value]) => {if (key==WantedKey) val=value});
       return val
    })
  }

 const newArray = extractArrayFromKey(arr,'cuisineType') 

 -> ["Indian", "Italian", "Asian", "Japanese", "African"]

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