在javascript中为数组和数组数组创建函数。

时间:2017-10-04 18:05:09

标签: javascript arrays function

仍然是javascript的新手,并且阵列中的数组遇到了很多麻烦。我的任务是从两个数组中提取名称和引号。我的任务是制作一个功能,可以在其中插入一个引用并吐出响应" John说:Blah blah blah"他们就是这样设置的。

let names = [ John, James, Joe, Justin] 
let quotes = [ 
[ "Help me." 
 "Blah blah blah blah"
  "Blah blah blah" ] 
 [ "Blah blah blah" 
   "Quote here" ]] 

现在有更多的名字和引号,而不是我为了简洁而停下来的名字和引号。名称和引号都匹配,因为names数组中的第一个名称与引号数组中的第一个引号数组相对应。这是我为它编写代码的尝试。

 function whoSaidThis (quote) {
 var index = quotes.indexOf(quote);
 return crewmembers.index 
 }

这回归未定义,我无法弄清楚原因。

4 个答案:

答案 0 :(得分:1)

为什么返回undefined

您的函数返回undefined,因为您没有对象index的初始化属性crewmembers,因此您尝试访问不存在的crewmembers属性<{1}}已退回。

这是Javascript方式告诉你“船员对象不存在嘿索引属性”

此外,关于您的尝试,您尝试在undefined数组中搜索qoute,而不是在{{1}的每个项目中搜索qoutes数组。

当你点击一个匹配时,你返回该项数组的索引,这个索引是qoute数组中该项数组的索引。

您可以这样做:

qoutes

答案 1 :(得分:0)

您可以使用Array#findIndexArray#includes进行搜索,并获取数组的索引以返回相应的名称。

&#13;
&#13;
function whoSaidThis(quote) {
    var index = quotes.findIndex(q => q.includes(quote));
    return names[index];
}

let names = ["John", "James", "Joe", "Justin"],
    quotes = [
        ["Help me.", "Blah blah blah blah", "Blah blah blah"],
        ["Blah blah blah", "Quote here"]
    ];

console.log(whoSaidThis("Quote here"));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

此代码实际上并未解决您的问题。但它可能有所帮助。

请注意,我在这里使用ES6。但您可以轻松地将其转换为ES5

&#13;
&#13;
const personsQuotes = {
  'John': ['bla', 'Yeah', 'No'],
  'James': ['qew', 'ert', 'dasd'],
  'Joe': ['ok', 'ko', 'oko'],
  'Justin': ['ZZz', 'zzz', 'bla']
}

function whoSaidThis(phrase) {
  let ans = [];

  for(person in personsQuotes) {
    personsQuotes[person].forEach((quote) => {
      if (quote === phrase)
        ans.push(person);
    });
  }

  return ans.length ? ans : null;
}

console.log( whoSaidThis('kek') );
console.log( whoSaidThis('ok') );
console.log( whoSaidThis('bla') );
&#13;
&#13;
&#13;

答案 3 :(得分:0)

我认为你在找的是这样的。 在您的示例中,多个人说同样的事情,但输出是单个名称。您只需在whoSaid中保留一个数组,然后返回/打印该数组,如果数组在for循环结束时为空,则返回['nobody']

let names = [ 'John', 'James', 'Joe', 'Justin'];
let quotes = [ 
  ["Help me.",
  "Blah blah blah blah",
  "Blah blah blah"],
  [ "Blah blah blah", 
    "Quote here" ]];

function whoSaid(quote){
  for(var nameIndex = 0; nameIndex < quotes.length; nameIndex++){
    if(quotes[nameIndex].indexOf(quote) !== -1){
      return names[nameIndex];
    }
  }
  return 'nobody';
}

function printQuote(quote){ 
  console.log(whoSaid(quote), ' says: ', quote);
}

printQuote('Help me.' );
printQuote('Quote here' );
printQuote('Nobody said that');