Я надеюсь поместить свои данные json в список, а затем добавить объекты в список и упорядочить все по местоположению
const [list, setList] = useState([])
const blocks = 4
const placeholder = [{ action : null, location : null, title : null }]
const json = [
{
"action": "go back",
"location": 0,
"title": "first Demo"
},
{
"action": "press go",
"location": 2,
"title": "Second"
}
]
Output I am hoping for when I console.log(list)
[
{
"action": "go back",
"location": 0,
"title": "first Demo"
},
{
"action": "none",
"location": 1,
"title": "first Demo"
},
{
"action": "press go",
"location": 2,
"title": "Second"
},
{
"action": "none",
"location": 3,
"title": "first Demo"
}
]
Что я пробовал. Это работает, но мне нужен лучший способ сделать это
const jsonValue = await AsyncStorage.getItem('@custom_layout');
if (jsonValue != null) {
const createPallet = Array.from({length: blocks}, (v, i) => ({
title: null,
icon: null,
UUID: i,
location: i,
Children: [],
action: null,
}));
JSON.parse(jsonValue).map((item, i) => {
//Find index of specific object using findIndex method.
const objIndex = createPallet.findIndex(
obj => obj.location === item.location,
);
//Update object's.
createPallet[objIndex] = item;
// This will update your state and re-render
setItems([...createPallet]);
});
В основном мы получаем количество блоков. Затем мы переупорядочиваем json по местоположению. Если есть пробел от 0 до 3, заполните его данными-заполнителями
1 ответ
Где вы устанавливаете список переменных const [list, setList] = useState([])
вы фактически устанавливаете его как пустой массив []
. Но это только вопрос о терминологии. Вы можете отсортировать массив с помощью функции сортировки следующим образом. Но потерпите, я собираюсь переименовать его в массив.
const [array, setArray] = useState([]);
//Now you can add missing blocks.
for(let i=0; i<blocks; i++){
if(!json.find(element=>element.location==i)){
const newplaceholder = placeholder[0];
newplaceholder.location = i;
json.push(newplaceholder)
}
}
//This is your sort function
const sortArray = (a, b)=>{
return a.location-b.location
}
//When you want to use it to sort the array
//https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
json.sort(sortArray)
//Once you've added the placeholders and sorted the array
setArray(json);
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.