Warm tip: This article is reproduced from serverfault.com, please click

search and replace string on title key nested object vue js

发布于 2020-11-30 14:10:36

I have a nested object that includes several keys, these keys also include title and children. children is an array of the objects that have title and children keys too. (they look like a tree) how can I search and replace one word or a part of a title's value?

const object = {
    id: 'uuid',
    title: 'hello You',
    type: number,
    visibility: true,
    children: [
        {
            id: 'uuid',
            title: 'You don't have any comments...',
            type: number,
            visibility: true,
            children: [{...}, {...}, ...],
            key1: {...},
            key2: [{...}]
        },
        {
            id: 'uuid',
            title: 'You your problem is not with json...',
            type: number,
            visibility: true,
            children: [{...}, {...}, ...],
            key1: {...},
            key2: [{...}]
       }
    ],
    key1: {...},
    key2: [{...}]
}

search you and replace world on title

output = {
    id: 'uuid',
    title: 'hello world',
    type: number,
    visibility: true,
    children: [
        {
            id: 'uuid',
            title: 'world don't have any comments...',
            type: number,
            visibility: true,
            children: [{...}, {...}, ...],
            key1: {...},
            key2: [{...}]
        },
        {
            id: 'uuid',
            title: 'world your problem is not with json...',
            type: number,
            visibility: true,
            children: [{...}, {...}, ...],
            key1: {...},
            key2: [{...}]
       }
    ],
    key1: {...},
    key2: [{...}]
}
Questioner
Mohammad
Viewed
0
kusiaga 2020-12-01 11:47:52

You can try using recursive strategy to find any key within an array and also search on their children as well.

function recursive (newArray) {
  newArray.map(obj => {
    if (obj.title) {
      obj.title = obj.title.replace(/You/g, 'world')
    }
    if (obj.children) {
      return recursive (obj.children)
    }
  })
  return newArray
}

using the function

let arr = [object]

recursive(arr)