用Underscore创建`option`

时间:2017-07-30 20:10:45

标签: javascript html underscore.js

鉴于以下内容:

function autoCompleteOptions(json) {
        _.map(json, function(x) {
            const a = x["a"];
            const b = x["b"];
            var option = document.createElement('option');
            option.setAttribute('data-value', a);
            option.value = b;
            console.log('option:', option);
            return option;
        })
    }

var result = autoCompleteOptions([
    {
      "a" : "hi", 
      "b" : "world"
    }
  ]);

console.log('result:', result);
<script src="http://underscorejs.org/underscore-min.js"></script>

为什么console.log显示undefined?我期待一系列option HTML元素。

2 个答案:

答案 0 :(得分:1)

我认为您需要从函数

返回_.map的结果
   return _.map(json, function(x) {...}

答案 1 :(得分:0)

这仅仅是Stackoverflow工作原理的一个问题。您尝试从非安全来源(_)加载http://underscorejs.org/underscore-min.js库,但SO使用https

https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js等安全来源加载,以解决_未定义的问题。

作为次要问题,正如其他人所指出的那样,您需要从autoCompleteOptions函数返回一些内容。

function autoCompleteOptions(json) {
  return _.map(json, function(x) {
    const a = x["a"];
    const b = x["b"];
    var option = document.createElement('option');
    option.setAttribute('data-value', a);
    option.value = b;
    console.log('option:', option);
    return option;
  })
}

var result = autoCompleteOptions([{
  "a": "hi",
  "b": "world"
}]);

console.log('result:', result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>