Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果数组中的对象没有';使用.map()时没有密钥_Javascript - Fatal编程技术网

Javascript 如果数组中的对象没有';使用.map()时没有密钥

Javascript 如果数组中的对象没有';使用.map()时没有密钥,javascript,Javascript,我正在使用Dialogflow,我想返回消息数组中未指定平台键的对象的语音值: "messages": [ { "type": 0, "platform": "skype", "speech": "FOO" }, { "type": 0, "platform": "line", "speech": "FOO" }, { "type": 0, "platform"

我正在使用Dialogflow,我想返回消息数组中未指定平台键的对象的语音值:

"messages": [
    {
      "type": 0,
      "platform": "skype",
      "speech": "FOO"
    },
    {
      "type": 0,
      "platform": "line",
      "speech": "FOO"
    },
    {
      "type": 0,
      "platform": "facebook",
      "speech": "FOO"
    },
    {
      "type": 0,
      "platform": "telegram",
      "speech": "FOO"
    },
    {
      "type": 0,
      "platform": "kik",
      "speech": "FOO"
    },
    {
      "type": 0,
      "speech": "FOO"
    }
  ]
目前,我通过这个丑陋的过程返回值:

messages = messages[messages.length - 1].speech;
我担心的是,我不想依赖返回平台无关消息的数组作为最后一个元素

目前,这是我尝试的:

 console.log(messages.map(function(obj) {
    if (!(obj.hasOwnProperty('platform'))){
      return obj;
    }
  }));
但是我收到一个错误,它表明
TypeError:messages.map不是一个函数


基于上面的代码,应该如何为这种情况设计map函数呢?

我想您有这样的功能。我认为您正在map/关联数组(或JS对象)上运行map,而map不在该对象上运行。下面是我认为对你有用的修订样本

let messageMap={“messages”:[
{
“类型”:0,
“平台”:“skype”,
“演讲”:“福”
},
{
“类型”:0,
“平台”:“线路”,
“演讲”:“福”
},
{
“类型”:0,
“平台”:“facebook”,
“演讲”:“福”
},
{
“类型”:0,
“平台”:“电报”,
“演讲”:“福”
},
{
“类型”:0,
“平台”:“kik”,
“演讲”:“福”
},
{
“类型”:0,
“演讲”:“福”
}
]};
//筛选出未定义平台的消息。
让platformlessMessages=messageMap['messages'].filter((message)=>{
//返回平台不存在或未定义的所有消息的列表。
返回消息。平台===未定义;
});

console.log(无平台消息);//根据上面的代码,我想你有这样的东西。我认为您正在map/关联数组(或JS对象)上运行map,而map不在该对象上运行。下面是我认为对你有用的修订样本

let messageMap={“messages”:[
{
“类型”:0,
“平台”:“skype”,
“演讲”:“福”
},
{
“类型”:0,
“平台”:“线路”,
“演讲”:“福”
},
{
“类型”:0,
“平台”:“facebook”,
“演讲”:“福”
},
{
“类型”:0,
“平台”:“电报”,
“演讲”:“福”
},
{
“类型”:0,
“平台”:“kik”,
“演讲”:“福”
},
{
“类型”:0,
“演讲”:“福”
}
]};
//筛选出未定义平台的消息。
让platformlessMessages=messageMap['messages'].filter((message)=>{
//返回平台不存在或未定义的所有消息的列表。
返回消息。平台===未定义;
});

console.log(无平台消息);//对该对象列表执行任何操作。
解决方案1:

您只需循环浏览消息并查找您要查找的内容。这里有一个可行的解决方案:

var消息=[
{
“类型”:0,
“平台”:“skype”,
“演讲”:“福”
},
{
“类型”:0,
“平台”:“线路”,
“演讲”:“福”
},
{
“类型”:0,
“平台”:“facebook”,
“演讲”:“福”
},
{
“类型”:0,
“平台”:“电报”,
“演讲”:“福”
},
{
“类型”:0,
“平台”:“kik”,
“演讲”:“福”
},
{
“类型”:0,
“演讲”:“福”
}
]
for(消息中的var obj){
if(!(messages[obj].hasOwnProperty('platform')){
警报(消息[obj]。语音);
}

}
解决方案1:

您只需循环浏览消息并查找您要查找的内容。这里有一个可行的解决方案:

var消息=[
{
“类型”:0,
“平台”:“skype”,
“演讲”:“福”
},
{
“类型”:0,
“平台”:“线路”,
“演讲”:“福”
},
{
“类型”:0,
“平台”:“facebook”,
“演讲”:“福”
},
{
“类型”:0,
“平台”:“电报”,
“演讲”:“福”
},
{
“类型”:0,
“平台”:“kik”,
“演讲”:“福”
},
{
“类型”:0,
“演讲”:“福”
}
]
for(消息中的var obj){
if(!(messages[obj].hasOwnProperty('platform')){
警报(消息[obj]。语音);
}

}
假设
消息
实际上定义为数组,我建议使用
查找
函数而不是
映射
。例如:

console.log(messages.find(function (obj) {
  return !obj.hasOwnProperty('platform');
}));
另见:


假设
消息
实际上被定义为数组,我建议使用
查找
函数而不是
映射
。例如:

console.log(messages.find(function (obj) {
  return !obj.hasOwnProperty('platform');
}));
另见:


检查消息的类型(其构造函数是什么),它可能不是数组。。。您还可以尝试使用forEach,for等来迭代它。
messages.messages.filter(m=>!m.hasOwnProperty('platform').map(m=>m.speech);
检查消息的类型(它的构造函数是什么),它可能不是数组……您还可以尝试使用forEach,for等来迭代它。
messages.messages.filter(m=>!m.hasOwnProperty('platform')).map(m=>m.speech);
但是这将只返回第一个实例,对吗?或者它会像map一样返回多个实例吗?在阅读文档进行查找之后,只有当我想要第一个实例时,这个答案才是好的,但它不会返回所有可能的答案(map所做的):但这将只返回第一个实例,对吗?或者它将返回多个实例,如map?在阅读查找文档后,只有当我想要第一个实例时,这个答案才是好的,但它不会返回所有可能的答案(map是什么):是的,这是我一直在寻找的解决方案2。这是一个很好的解决方案,因为它将返回对象中不存在平台的任何可能实例。是的,这是我一直在寻找的解决方案2。这是一个很好的解决方案,因为它将返回任何可能的实例