麻烦解析数组的结果

时间:2017-05-24 13:03:00

标签: javascript arrays sharepoint

我在尝试解析数组的结果并打印到控制台时遇到了一些麻烦。实际上这是一个两部分问题。当我构建数组时,它会在结果中添加“undefined”。当我尝试循环遍历数组中的各个字符串时,它不会解析,只返回完整的数组对象。

我要做的是收集从列表视图中选择的所有字段值,并将它们作为单独的项目写入另一个子列表。在控制台中显示结果时,它显示为对象数组。当我对它运行typeof方法时,我相信它显示为一个字符串。

重申一下,为什么我未定义,为什么我的数组无法正确打印到控制台。下面是到目前为止返回的内容(当选择了两个记录时)和我的代码的示例。

结果:

undefinedDaffy DuckBugs Bunny

未定义

代码:

// Grabs selected items from getSelected function and passes parameters to writeSelected function
function callAccepted() {
    getSelected().done(function(varObjects) { 
        for (var k in varObjects) {
            console.log(varObjects[k]);
        }

    }); // End getSelected
} // End callAccepted

// Grabs selected items, accepts input from callAccepted or callRejected functions
function getSelected() {
    var dfd = $.Deferred(function(){
        var ctx = SP.ClientContext.get_current();
        var clientContext = new SP.ClientContext(); 
        var targetList = clientContext.get_web().get_lists().getByTitle(ListName);
        var SelectedItems = SP.ListOperation.Selection.getSelectedItems(ctx);
        var items = [];
        var arrItems = [];
        for (var i in SelectedItems) {
            var id = SelectedItems[i].id;
            var item = targetList.getItemById(id);
            clientContext.load(item, "Title");
            items.push(item);
        } // End for
        clientContext.executeQueryAsync(
            function(){ // Return to button click function
                var itemLength = 0;
                var itemObjects = [];
                for (var j = 0; j < items.length; j++) {
                    itemObjects = items[j].get_item("Title");
                    itemLength += itemObjects;
                    arrItems.push(itemObjects);
                }
                dfd.resolve(arrItems, itemLength);
            },
            function(){ // Return to button click function
                dfd.reject(args.get_message());
            }
        ); // End ClientContext
    }); // End dfd
  return dfd.promise();
} // End getSelected

1 个答案:

答案 0 :(得分:0)

你为什么写“var itemObjects;”在1行中添加一个字符串“itemObjects + = items [j] .get_item(”Title“);”在另一个?无论如何只有1个字符串,所以当你将这2行改为1时,“undefined”应该会消失:

function callAccepted() {
    getSelected().done(function(varObjects, iLength) { 
    // Stuff
                for (var k = 0; k < iLength; k++) {
                        console.log(varObjects[k]);
                }
    }); // End getSelected
} // End callAccepted

// Get user information function
function getSelected() {
    var dfd = $.Deferred(function(){
        var ctx = SP.ClientContext.get_current();
        var clientContext = new SP.ClientContext(); 
        var targetList = clientContext.get_web().get_lists().getByTitle(ListName);
        var SelectedItems = SP.ListOperation.Selection.getSelectedItems(ctx);
        var items = [];
        var arrItems = [];
        for (var i in SelectedItems) {
            var id = SelectedItems[i].id;
            var item = targetList.getItemById(id);
            clientContext.load(item, "Title");
            items.push(item);
        } // End for
        clientContext.executeQueryAsync(
            function(){ // Return to button click function
                for (var j = 0; j < items.length; j++) {
                    var itemObjects = items[j].get_item("Title");
                    var itemLength = items.length;
                    arrItems.push(itemObjects);
                }
                dfd.resolve(arrItems, itemLength);
            },
            function(){ // Return to button click function
                dfd.reject(args.get_message());
            }
        ); // End ClientContext
    }); // End dfd
  return dfd.promise();
} // End getSelected

原因是在创建没有任何值的变量之后,它是未定义的,所以+ ='Unicorn'会给我们丑陋的'UndefinedUnicorn'。如果您希望为此目的创建变量,请将其写为“var x =''”。

如果 - 例如 - 你想要总结所有“项目”的长度,那么这个函数应该是这样的:

        function(){ // Return to button click function
            var itemLength = 0;
            for (var j = 0; j < items.length; j++) {
                var itemObjects = items[j].get_item("Title");
                itemLength += itemObjects;
                arrItems.push(itemObjects);
            }
            dfd.resolve(arrItems, itemLength);
        }

但我不确定你想要到这里来的是什么。