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 我需要帮助加快React Native中的数组筛选/列表视图(对其他方法开放)_Javascript_Arrays_React Native_Sorting - Fatal编程技术网

Javascript 我需要帮助加快React Native中的数组筛选/列表视图(对其他方法开放)

Javascript 我需要帮助加快React Native中的数组筛选/列表视图(对其他方法开放),javascript,arrays,react-native,sorting,Javascript,Arrays,React Native,Sorting,我有一个结构(我控制格式;每个节点都有“名称”:“”和“选中”:true) 我希望在react native中构建一个嵌套的checkbox控件 我很成功,有点。。。通过破坏这个JSON(几次迭代的尝试,我还没有清理这个代码) 通过:更改原始数据 let obj = {} for (const rs of rcftData.foodtree) { obj["r-" + rs.realmid] = { realmid: rs.realmid , c

我有一个结构(我控制格式;每个节点都有“名称”:“”和“选中”:true)

我希望在react native中构建一个嵌套的checkbox控件

我很成功,有点。。。通过破坏这个JSON(几次迭代的尝试,我还没有清理这个代码)

通过:更改原始数据

let obj = {}
for (const rs of rcftData.foodtree) {
    obj["r-" + rs.realmid] 
        = { realmid: rs.realmid
            , checked: false
            , skey: "r-" + rs.realmid
            , name: rs.name
            , padd: 0 
        }
    for (const cs of rs.children) {
        obj["r-" + rs.realmid + "-c-" + cs.classid] 
            = { realmid: rs.realmid
                , classid: cs.classid
                , checked: false
                , skey: "r-" + rs.realmid + "-c-" + cs.classid
                , name: cs.name
                , padd: 15 
            }
        for (const fs of cs.children) {
            obj["r-" + rs.realmid + "-c-" + cs.classid + "-f-" + fs.familyid] 
                = { realmid: rs.realmid
                    , classid: cs.classid
                    , familyid: fs.familyid
                    , checked: false
                    , skey: "r-" + rs.realmid + "-c-" + cs.classid + "-f-" + fs.familyid
                    , name: fs.name
                    , padd: 30 
                }
            for (const ts of fs.children) {
                obj["r-" + rs.realmid + "-c-" + cs.classid + "-f-" + fs.familyid + "-t-" + ts.typeid] 
                    = { realmid: rs.realmid
                        , classid: cs.classid
                        , familyid: fs.familyid
                        , typeid: ts.typeid
                        , checked: false
                        , skey: "r-" + rs.realmid + "-c-" + cs.classid + "-f-" + fs.familyid + "-t-" + ts.typeid
                        , name: ts.name
                        , padd: 45 
                    }
            }
        }
    }
}
setFilteredChecks(_.values(obj))
这就把它变成了这样

const wowWtf =  [
     {
      "checked": true,
      "padd": 0,
      "realmid": "1",
      "skey": "r-1",
    },
     {
      "checked": true,
      "classid": "1",
      "padd": 15,
      "realmid": "1",
      "skey": "r-1-c-1",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "1",
      "padd": 30,
      "realmid": "1",
      "skey": "r-1-c-1-f-1",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "1",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-1-t-1",
      "typeid": "1",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "1",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-1-t-2",
      "typeid": "2",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "1",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-1-t-3",
      "typeid": "3",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "1",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-1-t-4",
      "typeid": "4",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "1",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-1-t-5",
      "typeid": "5",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "1",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-1-t-6",
      "typeid": "6",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "2",
      "name": "White",
      "padd": 30,
      "realmid": "1",
      "skey": "r-1-c-1-f-2",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "2",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-2-t-7",
      "typeid": "7",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "3",
      "padd": 30,
      "realmid": "1",
      "skey": "r-1-c-1-f-3",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "3",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-3-t-8",
      "typeid": "8",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "3",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-3-t-9",
      "typeid": "9",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "3",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-3-t-10",
      "typeid": "10",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "3",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-3-t-11",
      "typeid": "11",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "3",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-3-t-12",
      "typeid": "12",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "3",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-3-t-13",
      "typeid": "13",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "3",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-3-t-14",
      "typeid": "14",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 30,
      "realmid": "1",
      "skey": "r-1-c-1-f-4",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-15",
      "typeid": "15",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-16",
      "typeid": "16",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-17",
      "typeid": "17",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-18",
      "typeid": "18",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-19",
      "typeid": "19",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-20",
      "typeid": "20",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-21",
      "typeid": "21",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-22",
      "typeid": "22",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-23",
      "typeid": "23",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-24",
      "typeid": "24",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-25",
      "typeid": "25",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-26",
      "typeid": "26",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-27",
      "typeid": "27",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-28",
      "typeid": "28",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-29",
      "typeid": "29",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-30",
      "typeid": "30",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-31",
      "typeid": "31",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-32",
      "typeid": "32",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-33",
      "typeid": "33",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-34",
      "typeid": "34",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-35",
      "typeid": "35",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-36",
      "typeid": "36",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-37",
      "typeid": "37",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-38",
      "typeid": "38",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-39",
      "typeid": "39",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "4",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-4-t-40",
      "typeid": "40",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "5",
      "padd": 30,
      "realmid": "1",
      "skey": "r-1-c-1-f-5",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "5",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-5-t-41",
      "typeid": "41",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "6",
      "padd": 30,
      "realmid": "1",
      "skey": "r-1-c-1-f-6",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "6",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-6-t-42",
      "typeid": "42",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "6",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-6-t-43",
      "typeid": "43",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "7",
      "padd": 30,
      "realmid": "1",
      "skey": "r-1-c-1-f-7",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "7",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-7-t-44",
      "typeid": "44",
    },
     {
      "checked": true,
      "classid": "1",
      "familyid": "7",
      "padd": 45,
      "realmid": "1",
      "skey": "r-1-c-1-f-7-t-45",
      "typeid": "45",
    }
  ]
因为我们的目标是创建一个带有“下面全部检查”类型功能的分级复选框列表

它起作用了,有点

import { CheckBox } from 'react-native-elements'
import _ from 'lodash'

const [filteredChecks, setFilteredChecks] = useState([wowWtf]);

const checkboxVisibilityToggle = (incomingKey) => {
    let temp = filteredChecks
    let obj = temp.find(x => x.skey === incomingKey);
    let index = temp.indexOf(obj);
    let newval = !temp[index].checked
    for(i=0;i<temp.length;i++){
        if(temp[i].skey.includes(incomingKey)){
            temp[i].checked=newval
        }
    }
    setFilteredChecks(temp)
}

const RenderFilterCategory = ({ item }) => {

    return (
        <View style={[{ paddingLeft: item.padd}]} >

            <CheckBox
                checked={item.checked}
                title={item.name}
                key={item.skey}
                checkedColor={xtextlink}
                onPress={() => { checkboxVisibilityToggle(item.skey) }}
                keyExtractor={item.skey}
            />
        </View>
    )
}
// section from the main screen.
<ScrollView style={[{height:400}]}>
    <View>
        <FlatList
            vertical
            data={wowWtf}
            renderItem={RenderFilterCategory}
            keyExtractor={item => `${item.skey}`}
            numColumns={1}
        />
    </View>
</ScrollView>
看前两个答案:看前两个答案:
import { CheckBox } from 'react-native-elements'
import _ from 'lodash'

const [filteredChecks, setFilteredChecks] = useState([wowWtf]);

const checkboxVisibilityToggle = (incomingKey) => {
    let temp = filteredChecks
    let obj = temp.find(x => x.skey === incomingKey);
    let index = temp.indexOf(obj);
    let newval = !temp[index].checked
    for(i=0;i<temp.length;i++){
        if(temp[i].skey.includes(incomingKey)){
            temp[i].checked=newval
        }
    }
    setFilteredChecks(temp)
}

const RenderFilterCategory = ({ item }) => {

    return (
        <View style={[{ paddingLeft: item.padd}]} >

            <CheckBox
                checked={item.checked}
                title={item.name}
                key={item.skey}
                checkedColor={xtextlink}
                onPress={() => { checkboxVisibilityToggle(item.skey) }}
                keyExtractor={item.skey}
            />
        </View>
    )
}
// section from the main screen.
<ScrollView style={[{height:400}]}>
    <View>
        <FlatList
            vertical
            data={wowWtf}
            renderItem={RenderFilterCategory}
            keyExtractor={item => `${item.skey}`}
            numColumns={1}
        />
    </View>
</ScrollView>
let thisid = temp[index][keysearch]
setFilteredChecks(
    filteredChecks.map(item => 
        item[keysearch] === thisid
        ? {...item, checked : newval} 
        : item 
))