React状态和JSON和数组=>错误的结果

问题描述 投票:0回答:1

编辑:所以,我找到了我最初问题的解决方案,这让我意识到我有另一个问题。

它似乎比我想象的要容易

setNumbers(e) {
    e.preventDefault();
    var already_exists = false;
    var ls_data = this.state.storedNumbers;

    var rname = document.getElementById('name').value;
    var rnumb = document.getElementById('nummer').value;
    var ls_key = this.state.ls_key;

    for (key in ls_data) {
        if(ls_data.hasOwnProperty(key) === true) {
            if(ls_data[key].name === rname) {
                if(ls_data[key].Number === rnumb) {
                    already_exists = true;
                }
            }
        }
    }

    if(!already_exists) {
        ls_key++;
        ls_data[ls_key] = {
            name: rname,
            Number: rnumb
        };

        localStorage.setItem("ls_numbers", JSON.stringify(this.state.storedNumbers));
        localStorage.setItem("ls_key", ls_key); 

        this.setState({
            ls_key: localStorage.getItem("ls_key"),
        });

    }
}

但现在我的问题是,我无法迭代它,因为它是一个嵌套对象,而不是一个数组。所以.map不起作用(this.state.storedNumbers.map不是函数)。

遗憾地将storedNumber更改为数组并不能解决问题

        ls_data[ls_key] = {
            name: rname,
            Number: rnumb
        };

没有在数组中工作。所以现在我的问题是。我可以使用我的ls_key变量在我的数组中创建一个名称对象吗?使用上面的代码会导致:

[
    null,
    {
        "name" : "Person 1",
        "Number" : "XXXXXXXX"
    },
    {
        "name" : "Person 2",
        "Number" : "XXXXXXXX"
    }
]

而数组应该看起来像:

[
    "1": {
        "name" : "Person 1",
        "Number" : "XXXXXXXX"
    },
    "2": {
        "name" : "Person 2",
        "Number" : "XXXXXXXX"
    }
]

或者有没有办法迭代嵌套的JSON结果,就像.map对数组一样?

json reactjs iteration local-storage states
1个回答
0
投票

好吧那么,我自己想通了:

我的数据出错的原因(最初的问题),仍然是蓝色的。我已经改变了很多代码并再次恢复原始代码,瞧瞧,奇迹般地说这一切都奏效了。不能告诉你有什么区别。之后,我可以轻松简化编辑问题中显示的代码。

为了迭代数据,下面的代码是我的解决方案。如果您有更清洁的解决方案,请告诉我!

{this.state.storedNumbers.length < 1
    ?   <li className='list-group-item'><strong>Geen recente nummers...</strong><span className='pull-right'><span className='glyphicon glyphicon-warning glyph-xl'></span></span></li>
    :   Object.keys(this.state.storedNumbers).map((number) => { 
            return (
                <div className='item' key={number}>
                    <a className='list-group-item list-link'>
                        <strong>{this.state.storedNumbers[number].name}</strong> - ({this.state.storedNumbers[number].Number})
                    </a>
                    <span className='button-delete glyph-xl'>
                        <i className='glyphicon glyphicon-trash glyph-xl' aria-hidden='true'></i>
                    </span>
                </div>
            )})
}
© www.soinside.com 2019 - 2024. All rights reserved.