在JavaScript中使用map从对象中获取数组,但是获得的数组带有未定义值。

4
我正在使用map函数获取数组的子部分。

var mappingobj = {"custom":[{"head":"202","sub":["302","303"]},{"head":"203","sub":["102"]}],"spec":[]};

var subids = mappingobj.custom.map(function(o, i) {
      if(o.head==202){
       return o.sub;
      }
});

console.log(subids);

我需要获取 ["302","303"]。但是我得到的输出是 [Array[2], undefined]。

1
你应该在 Array#filter 之后进行映射。 - Rayon
未定义是因为只有当您的“非严格相等”头匹配202时,您才会返回子级,其他情况不会返回,因此它们返回未定义。 - Icepickle
@rayon,如何在map中使用filter。你能告诉我吗? - ramu
3个回答

3
基本思路是使用map从数组中获取特定值。 如果您默认情况下不返回map中的任何内容,则将返回undefined,您将获得undefined。因此,请使用filter获取所需的对象,然后再使用map获取该对象的所需属性。

var mappingobj = {"custom":[{"head":"202","sub":["302","303"]},{"head":"203","sub":["102"]}],"spec":[]};

var subids = mappingobj.custom.filter(function(o, i) {
      if(o.head==202 && o.head){
       return o;
      }
}).reduce((acc,elem)=>{acc.push(...elem.sub); return acc;},[]);

console.log(subids);


是的,完全正确。但我想要单维数组,你能帮我吗,就像 [302, 303] 这样。 - ramu
请检查更新后的代码。即使有多个具有给定值的头文件,它也会将它们全部合并到一个数组中。 - HimanshuArora9419

0

你好,你可以试试这个。

var mappingobj = {
  "custom": [{
    "head": "202",
    "sub": ["302", "303"]
  }, {
    "head": "203",
    "sub": ["102"]
  }],
  "spec": []
};

var subids = mappingobj.custom.filter(function(o, i) {
  if (o.head == 202) {
    return o.sub;
  }
});

console.log(subids);

希望这能对你有所帮助。

它会起作用的,伙计,因为你已经返回了一个数组,试一下吧。 - Sultan Khan
它将返回对象数组,OP希望得到一维数组。 - Rayon

0
你可以先找到 headindexOf 然后取得 mapping.customsub

var mappingobj = {"custom":[{"head":"202","sub":["302","303"]},{"head":"203","sub":["102"]}],"spec":[]};
var obj = mappingobj.custom;
var index = obj.map(function (e) { return e.head; }).indexOf("202");
console.log(obj[index].sub);


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