Обновить массив объектов на основе переданного объекта - PullRequest
0 голосов
/ 12 июля 2020

У меня есть массив объектов следующего формата:

const options = [
  { key: 1, text: "Name", value: "name", icon: "sort" },
  { key: 2, text: "Time", value: "time", icon: "sort" },
  { key: 3, text: "Type", value: "type", icon: "sort" }
];

Теперь, в зависимости от переданного ввода, какой формат {fieldName, order} я должен изменить массив. Обычно order будет принимать два значения «as c» или «des c», а fieldName будет принимать любое из значений свойства value массива параметров.

Например: {fieldName: "name", order: "as c"} или {fieldName: "type", order: "des c"}

Основываясь на этом порядке, я изменил поле icon исходного массива для этого поля.

Если order равно как c, то измените свойство icon для этого поля на sort up. Если его порядок des c, затем измените свойство icon для этого поля на sort down

Пример

1) sortBy: { fielName: "name", order:"asc"} 

//Output
[
  { key: 1, text: "Name", value: "name", icon: "sort up" },
  { key: 2, text: "Time", value: "time", icon: "sort" },
  { key: 3, text: "Type", value: "type", icon: "sort" }
];

2) sortBy: { fielName: "type", order:"desc"} 

//Output
[
  { key: 1, text: "Name", value: "name", icon: "sort" },
  { key: 2, text: "Time", value: "time", icon: "sort" },
  { key: 3, text: "Type", value: "type", icon: "sort down"}
];

Он должен обновлять только icon поля, переданного ему, а остальные поля icon должны быть установлены в "sort"

Это то, что я пробовал

const options = [
  { key: 1, text: "Name", value: "name", icon: "sort" },
  { key: 2, text: "Time", value: "time", icon: "sort" },
  { key: 3, text: "Type", value: "type", icon: "sort" }
];

function updateArray(obj)
{
   const newArr = options.map(item => {
     if(item.name === obj.fieldName) {
    return {...item, icon: obj.order === "desc" ? "sort-desc" :"sort-asc" };
    }
    return {...item};
   });
   return newArr;
}

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Ваша функция работает, но вы пытаетесь получить доступ к несуществующему свойству.

Я считаю, что это должно быть:

if(item.value === obj.fieldName) {
  ...
}

Демо:

const options = [
  { key: 1, text: "Name", value: "name", icon: "sort" },
  { key: 2, text: "Time", value: "time", icon: "sort" },
  { key: 3, text: "Type", value: "type", icon: "sort" }
];

function updateArray(obj)
{
   const newArr = options.map(item => {
     if(item.value === obj.fieldName) {
    return {...item, icon: obj.order === "desc" ? "sort-desc" :"sort-asc" };
    }
    return {...item};
   });
   return newArr;
};

console.log(updateArray({fieldName: 'type', order: 'desc'}));
console.log(updateArray({fieldName: 'time', order: 'asc'}));
console.log(updateArray({fieldName: 'name', order: 'desc'}));
1 голос
/ 12 июля 2020

Попробуйте это

const options = [
  { key: 1, text: "Name", value: "name", icon: "sort" },
  { key: 2, text: "Time", value: "time", icon: "sort" },
  { key: 3, text: "Type", value: "type", icon: "sort" }
];
function sorta(op,options){
   field =op.fielName
   newarray=[]
   options.forEach(o=>{
     if(o.value==field){
      op.order=="asc"?f="up":f="down"
      o.icon="sort-"+f
      newarray.push(o)
     }
      else newarray.push(o)
  })
     return newarray
}

console.log(sorta({ fielName: "name", order:"asc"},options ))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...