通过键获取对象值,而无需使用循环

时间:2018-08-03 18:50:51

标签: javascript jquery object

我想将用户上传的INI文件内容传输到一个对象,并将该对象数据与现有对象进行比较。 INI文件的示例内容如下所示:

Name: Aesthetic
Author: Redon
CursorCentre: 1
CursorExpand: 0
SliderBallFlip: 0
Combo1: 145,229,103
Combo2: 255,213,128

但是,当我尝试获取对象本身时,它正在工作。但是,当我尝试通过键来获取价值时,它是行不通的。在此示例中,如何通过键获得价值?

$(document).on('change','input[name=import]',function(e){
    var settings = {};
    var file = e.target.files[0];
    var reader = new FileReader();
    reader.onload = function(){
        var myText = reader.result;
        var myText = myText.split(/\r?\n/);
        $.each(myText, function(index, val) {
            var item = val.split(":");
            var itemkey = item[0];
            var itemval = $.trim(item[1]);
            settings[itemkey] = itemval;
        });
    }
    reader.readAsText(file);
    console.log(settings); // Works
    console.log(settings['Author']); // undefined
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="file" name="import" accept=".ini">

1 个答案:

答案 0 :(得分:1)

就像@connexo建议的那样:这是一个计时问题。在我稍作更改的版本中,我将两个console.log放在了reader.onload函数中,并且可以正常工作!

$(document).on('change','input[name=import]',function(e){
    var settings = {};
    var file = e.target.files[0];
    var reader = new FileReader();
    reader.onload = function(){
        var myText = reader.result;
        var myText = myText.split(/\r?\n/);
        $.each(myText, function(index, val) {
            var item = val.split(":");
            var itemkey = item[0];
            var itemval = $.trim(item[1]);
            settings[itemkey] = itemval;
        });
        console.log(settings); // really works
        console.log(settings['Author']); // works too!
    }
    reader.readAsText(file);
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="file" name="import" accept=".ini">

注意

当我说:“时间问题”时,严格来说这并不是全部事实。对象settings仅在$('document').on('change'...)函数内部可用,并且仅在{em>之后{em> reader.onload()完成其工作。如果要将内容存储在全局变量中(以供以后参考,也许可以通过另一个函数...),则需要将var settings={}; 外部您的$('document').on('change'...)功能,或使用类似window['settings']={};window.settings={};的功能。