7

我正在尝试使用 underscore.js 过滤这个 javascript 对象,但我不知道它为什么不起作用,它意味着找到任何包含“how”的问题值。

  var questions = [
    {question: "what is your name"},
    {question: "How old are you"},
    {question: "whats is your mothers name"},
    {question: "where do work/or study"},
    ];

var match = _.filter(questions),function(words){ return words === "how"});

alert(match); // its mean to print out -> how old are you?

完整的代码在这里(underscore.js 已经包含):http: //jsfiddle.net/7cFbk/

4

3 回答 3

15
  1. 您使用 关闭了函数调用.filter(questions)。最后一个)不应该在那里。
  2. 过滤通过遍历数组并使用每个元素调用函数来工作。在这里,每个元素都是一个对象{question: "..."},而不是一个字符串。
  3. 您检查是否相等,而您想检查问题字符串是否包含某个字符串。您甚至希望它不区分大小写。
  4. 您无法提醒对象。改为使用控制台console.log

所以:http: //jsfiddle.net/7cFbk/45/

var questions = [
    {question: "what is your name"},
    {question: "How old are you"},
    {question: "whats is your mothers name"},
    {question: "where do work/or study"},
];

var evens = _.filter(questions, function(obj) {
    // `~` with `indexOf` means "contains"
    // `toLowerCase` to discard case of question string
    return ~obj.question.toLowerCase().indexOf("how");
});

console.log(evens);
于 2012-08-12T19:12:03.583 回答
3

这是一个工作版本:

var questions = [
    {question: "what is your name"},
    {question: "How old are you"},
    {question: "whats is your mothers name"},
    {question: "where do work/or study"},
];

var hasHow = _.filter(questions, function(q){return q.question.match(/how/i)});

console.log(hasHow);

已修复的问题:

  • Parens 未正确放置。
  • 使用console.log而不是警报。
  • 在迭代每个问题时,您可能应该使用正则表达式来查找“如何”。
  • _filter遍历一个数组。您的数组包含对象,每个对象都包含一个问题。您传递给的函数_filter需要以相同的方式检查每个对象。
于 2012-08-12T19:12:02.193 回答
0
data = {
    'data1' :{
        'name':'chicken noodle'
     },
    'data2' :{
        'name':'you must google everything'
     },
    'data3' :{
        'name':'Love eating good food'
     }
}

_.filter(data,function(i){

    if(i.name.toLowerCase().indexOf('chick') == 0){

        console.log(i);

    }else{

        console.log('error');

    }

})
于 2013-02-19T07:52:33.250 回答