数组显示未定义为答案,而不显示对象值

时间:2019-03-03 12:51:36

标签: javascript arrays

当我传递title和author的值时,我想首先检查是否存在其他具有相同标题的值。如果存在,则不要将数据输入到空数组中;如果不存在,则输入数据。但是我没有得到答案。我在哪里做错了。

var add = (title, author) => {
  var i = 0;
  var notes = [];
  var note = {
    title,
    author
  };

  for (i = 0; i < notes.length; i++) {
    if (note.title === notes[i].title) {
      console.log('same entry');
    } else {
      notes.push(note);
    }
  };
  
  console.log(notes[i]);
};

add("TITLE", "AUTHOR")

4 个答案:

答案 0 :(得分:1)

您需要使用全局notes,因为对于每个调用,此数组都是空的。如果您发现具有相同title的条目,则需要返回该函数。

如果在数组中找不到标题,最后推送一个新对象。

var notes = [],                              // global or outside of the function
    add = (title, author) => {
        var i;
        for (i = 0; i < notes.length; i++) {
            if (title === notes[i].title) {  // check title
                console.log('same entry');
                return;                      // exit function if title exists
            }
        };
        notes.push({ title, author });       // no title found, add new object
    };
    
console.log(notes);

add('a', 'b');
console.log(notes);

add('a', 'b');
console.log(notes);

add('c', 'd');
console.log(notes);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)

注意长度在您的情况下始终为0。检查音符长度是否为0,即先按下,如果为true,则添加到音符中,否则执行您的逻辑。

//take it out of function
var notes = [];     

var add = (title,author)=>{
   
//Check if notes length o if true the add to notes
var note={ title, author };
  if(notes.length ==0)
     notes.push(note);
  else{
      for(var i = 0; i < notes.length;i++){
          if(title ===notes[i].title)
              console.log('same entry');
          else
            notes.push(note);
      };
    };
  } 
  
add('Javascript','abc');
add('Javascript','xyz');
add('java','lmn');
console.log(notes);

答案 2 :(得分:0)

您的代码中有很多问题。 1-

var notes = [];

此行在每次调用add(title,auther)时都会初始化notes数组,这将使其每次都为空。所以您需要全局定义它。

2-

for (i = 0; i < notes.length; i++) {
    if (note.title === notes[i].title) {
      console.log('same entry');
    } else {
      notes.push(note);
    }
  };

这部分将注释移到notes数组中每个与注释一不具有相同标题的元素的notes数组中。这将导致对同一元素进行多次添加。

按照@Nina Scholz的解决方案

答案 3 :(得分:0)

请检查以下代码,我认为这可能会解决您的问题...

var notes = [];

var add = (title, author) => {
  var i = 0;
  //var notes = [];    // declared globally  
  var note = {
    title,
    author
  };
  if (notes.length == 0) {
    notes.push(note);
  } // added this to add first record
  else {
    for (i = 0; i < notes.length; i++) {
      if (note.title === notes[i].title) {
        console.log('same entry');
      } else {
        notes.push(note);
      }
    };
  }
  console.log(notes[i]);
};

console.log(notes);

add('a', 'b');
console.log(notes);

add('a', 'b');
console.log(notes);

add('c', 'd');
console.log(notes);