Фильтровать массив объектов - стереть последнее слово в строке - PullRequest
1 голос
/ 07 мая 2020

У меня есть массив объектов:

[
   {
      barcode: ""
      description: "META AM 29 XX Edition Large"
      description2: ""
      group: "COM20"
   },

   {,
      barcode: ""
      description: "META AM 29 TEAM Large"
      description2: ""
      group: "COM20"
   }
]

Я хочу избавиться от последнего слова в описании. Итак, результат будет:

[
   {
      barcode: ""
      description: "META AM 29 XX Edition"
      description2: ""
      group: "COM20"
   },

   {,
      barcode: ""
      description: "META AM 29 TEAM"
      description2: ""
      group: "COM20"
   }
]

Я использую фильтр, но не понимаю, почему он не работает:

var filtered = data.filter((val) => {
   return val.description.replace(/\w+[.!?]?$/, '');
})
console.log(filtered)

Журнал представляет собой точно такой же массив без любые изменения.

Ответы [ 5 ]

3 голосов
/ 07 мая 2020

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

let data = [{
    barcode: "",
    description: "META AM 29 XX Edition Large",
    description2: "",
    group: "COM20"
  },

  {
    barcode: "",
    description: "META AM 29 TEAM Large",
    description2: "",
    group: "COM20"
  }
]

let result = data.map(ele => {
  let lastword = ele.description.lastIndexOf(" ");
  ele.description = ele.description.substring(0, lastword);


  return ele;


});

console.log(result)
0 голосов
/ 07 мая 2020

Тоже работает:

let arr = [
    {
        barcode: "",
        description: "META AM 29 XX Edition Large",
        description2: "",
        group: "COM20",
    },

    {
        barcode: "",
        description: "META AM 29 TEAM Large",
        description2: "",
        group: "COM20",
    }
];


let result = arr.map(item => {
    item.description = item.description.replace(/[ ](?=[^ ]*$)\w+[.!?]?\s?$/, '');
    return item;
});

console.log(result);
0 голосов
/ 07 мая 2020

Используя сладкий способ ES6, чистый и аккуратный раствор.

Используя индекс:

const data = [{"barcode":"","description":"META AM 29 XX Edition Large","description2":"","group":"COM20"},{"barcode":"","description":"META AM 29 TEAM Large","description2":"","group":"COM20"}];
const format = (data) =>
  data.map(({ description = "", ...rest }) => ({
    ...rest,
    description: description.substring(0, description.lastIndexOf(" ")),
  }));
console.log(format(data));

Использование разделения:

const data = [{"barcode":"","description":"META AM 29 XX Edition Large","description2":"","group":"COM20"},{"barcode":"","description":"META AM 29 TEAM Large","description2":"","group":"COM20"}];
const format = (data) =>
  data.map(({ description = "", rest }) => ({
    ...rest,
    description: description.split(" ").slice(0, -1).join(" "),
  }));
console.log(format(data));
0 голосов
/ 07 мая 2020

Используйте map

const data = [{"barcode":"","description":"META AM 29 XX Edition Large","description2":"","group":"COM20"},{"barcode":"","description":"META AM 29 TEAM Large","description2":"","group":"COM20"}];

var filtered = data.map((val) => {
  let obj = val;
  obj.description = obj.description.replace(/\w+[.!?]?$/, "");
  return obj;
});
console.log(filtered);
0 голосов
/ 07 мая 2020

Вам нужно использовать map:

var result = data.map(({description, ...rest}) => {
   description: description.replace(/\w+[.!?]?$/, '')
   , ...rest 
})

Пример:

let arr = [
    {
       barcode: "",
       description: "META AM 29 XX Edition",
       description2: "",
       group: "COM20"
    }, 
    {
       barcode: "",
       description: "META AM 29 TEAM",
       description2: "",
       group: "COM20"
    }
 ]

 const result = arr.map(({description, ...rest}) => ({
description : description.replace(/\w+[.!?]?$/, ''),
 ...rest,

 }))

 console.log(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...