Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 丢失的物品_Javascript_Arrays_Angularjs - Fatal编程技术网

Javascript 丢失的物品

Javascript 丢失的物品,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,在我的angular应用程序中,我尝试在页面之间保存/检索数据,并具有以下功能: $scope.storeData = function () { var selections = $scope.devices; console.log(selections); sessionStorage.setItem('selectedHandsets', JSON.stringify(selections)); var ss = sessionStorage.get

在我的angular应用程序中,我尝试在页面之间保存/检索数据,并具有以下功能:

$scope.storeData = function () {

    var selections = $scope.devices;
    console.log(selections);

    sessionStorage.setItem('selectedHandsets', JSON.stringify(selections));

    var ss = sessionStorage.getItem('selectedHandsets');
    console.log(ss);

}
这个问题很奇怪。我在
选择中所追求的关键值是'selectedManufacturer'和'selectedModel',这些值在
控制台.log(选择)
中按预期显示

ss
被记录时,“selectedManufacturer”和“selectedModel”在
会话存储中不可见。SelectedHandlets
。当数据被设置时,它们就在那里,因为我们可以在选择中看到它,但是当我记录
ss
时,它们就消失了

选择的格式如下所示:

[
    [
        { ... },
        { ... },
        selectedModel: { ... },
        selectedManufacuterer: { ... }
    ],
    [
        { ... },
        { ... },
        selectedModel: { ... },
        selectedManufacuterer: { ... }
    ]
]

如果我将
JSON.stringify()
包装在
console.log(选择)
周围,则selectedModel和selectedManufacturer将消失。有人能给我解释一下为什么会发生这种情况,以及合适的解决办法是什么吗

您是否尝试过检查控制台是否抛出错误

您拥有的是格式错误的JSON

[
    [
        { ... },
        { ... },
        selectedModel: { ... },
        selectedManufacuterer: { ... }
    ],
    [
        { ... },
        { ... },
        selectedModel: { ... },
        selectedManufacuterer: { ... }
    ]
]

    [
        { ... },
        { ... },
        selectedModel: { ... }, //There shouldn't be a named item in an array here
        selectedManufacuterer: { ... } //There shouldn't be a named item in an array here
    ]
数组中不应存在命名对象


编辑

你是这样做的:

var arrayBuff= [];
arrayBuff.push(2);
arrayBuff.push(4);
arrayBuff.push(6);

//this would produce this: [2,4,6]
console.log(arrayBuff);

arrayBuff.someField = "foobar";

//this would produce this: [2,4,6, someField: "foobar"]
// which is a malformed array
console.log(arrayBuff);
您可以这样做:

var arrayBuff = {},
    arrayBuff.arrays = [];
arrayBuff.arrays.push(2);
arrayBuff.arrays.push(4);
arrayBuff.arrays.push(6);

//this would produce this: { arrays: [2,4,6] }
console.log(arrayBuff);

arrayBuff.someField = "foobar";

//this would produce this: { arrays: [2,4,6], someField: "foobar"}
// which is correct and can be parsed by JSON.stringify
console.log(arrayBuff);

JSON.stringify无法解析命名字段的原因很简单,因为它需要一个数组。

前面的答案是正确的。您可以做的是将您的选择重建为类似
{arrObjs:[您的阵列将在这里]、型号:[……],制造商:[……]}

如何解决此问题?Angular正在推入命名项(这是我需要的),因为它们是ng modelscan的值。在将其放入localstorage之前,您是否提供JSON.stringify原始结果?选择的字符串形式。从那里,我们可以看到发生了什么没有错误,它只是忽略了命名的对象,而不包括它们您在哪里测试的浏览器?我真的被结果搞糊涂了。它在处理错误结构时从不抛出错误。使用chrome和检查工具