我有一个包含16,490行数据的json文件。这是一个片段:
[
...
["alrightty",2 ],
["alrighttyy",1 ],
["alrighty",100 ],
["alrightyy",1 ],
["alrigt",1 ],
...
]
这些数据将用于我的情绪分析论文项目。我使用以下代码从json文件中提取数据:
var positive_words_list = {}
function readJSONFile(filename,type) {
$.ajax({
type: 'GET',
url: filename,
dataType: 'json',
success: function(data) {
switch (type) {
case "pos" : positive_words = data; break;
case "neg" : negative_words = data; break;
case "afinn" : afinn_words = data; break;
}
},
async: false
});
}
readJSONFile('js/json/positivekeywords.json','pos');
for (var i = 0; i < positive_words.length; i++) {
row = positive_words[i];
positive_words_list[row[0]] = row[1];
};
这段代码的作用是从json文件中提取数据,然后将其放入一维数组中,每个单词作为数组索引,数字作为值。
现在我在$(function(){...})中加载网站时运行此代码;所以positive_words_list应该包含有关加载时间的数据。事情是在网站加载后我在控制台中执行positive_words_list.length,它输出63.正如我所说,应该有16,490个条目。
我错过了什么吗?我做错了什么?
谢谢!
约翰
编辑:我应该补充一点,当我在控制台中执行positive_words.length时,我得到正确数量的元素,164,950
答案 0 :(得分:1)
positive_words_list
是一个对象,而不是一个数组,所以你应该得到:
positive_words_list["alrightty"] === 2
positive_words_list["alrighttyy"] === 1
等等。您可以使用以下方法获取对象的键数组:
Object.keys(positive_words_list)
Object.keys(positive_words_list).length
将返回对象键的数组。请注意,Object.keys
是大多数当前浏览器中提供的ES5功能。
答案 1 :(得分:1)
据我所知positive_words_list
是一个JavaScript对象,它没有开箱即用的length
属性。因此,获得幻数63的唯一原因是因为您的数组数组包含单词length
作为第一项的实体;类似的东西:
[
...
['length', 63],
...
]
为了获得JavaScript Object中的键数,你可以Object.keys(positive_words_list).length
或迭代所有属性并递增计数器:
function size(obj) {
var key,
counter = 0;
for(key in obj) {
if(obj.hasOwnProperty(key)) {
counter++;
}
}
return counter;
}
size(positive_words_list); // <- will return number of properties in object
您的代码段可能会按以下方式修改:
<强> HTML 强>
<h1 id="data">Number of positive words is ...</h1>
<强>的JavaScript 强>
$(function(){
var positive_words,
positive_words_list = {};
function readJSONFile(filename,type) {
$.ajax({
type: 'GET',
url: filename,
dataType: 'json',
success: function(data) {
switch (type) {
case "pos" : positive_words = data; break;
case "neg" : negative_words = data; break;
case "afinn" : afinn_words = data; break;
}
},
async: false
});
}
readJSONFile('data.json','pos');
for (var i = 0; i < positive_words.length; i++) {
row = positive_words[i];
positive_words_list[row[0]] = row[1];
};
$('#data').html('Number of positive words is ' + Object.keys(positive_words_list).length);
});