Convert [] object sang [] object

const obj = [
  {
    type: 'and',
    left: 'Seoul',
    right: {
      type: 'or',
      left: 'various world restaurant',
      right: {
        type: 'or',
        left: 'affordable public transport system',
        right: {
          type: 'or',
          left: 'time in Seoul'
          right: {
            type: 'or',
            left: 'exotic area',
            right: {
              type: 'or',
              left: 'people',
              right: {
                type: 'or',
                left: 'November 8',
                right: {
                  type: 'or',
                  left: 'English most places',
                  right: {
                    type: 'or',
                    left: 'clean typical',
                    right: 'food joints open',
                  },
                },
              },
            },
          },
        },
      },
    },
  },
];

CONVERT ==>

const objNews = [
 {
    keyword: "Seoul",
    relatedKeyword: "various world restaurant, affordable public transport system, time in Seoul, exotic area, people, November 8, English most places, clean typical"
  }
]

ai đó hỗ trợ, hay gợi ý mình với. Cảm ơn rất nhiều

Ở đây gồm các dictionary object lồng nhau nên ta giải quyết từng dictionary kết hợp đệ quy.

1 khối cơ bản:

{
    type: 'or',
    left: 'clean typical',
    right: 'food joints open',
}

sẽ chuyển thành 'clean typical or food joints open'.

// ES6
convert = obj => obj là string ? obj : `${convert(obj.left)} ${obj.type} ${convert(obj.right)}`

Cách kiểm tra 1 object có phải string hay không thì bạn tự tìm hiểu nhé.

3 Likes

Cách này ổn quá, với khả năng hiện tại của mình chưa thể load hết được. Xin hỏi còn cách nào đơn giản hơn dài cũng đc ạ

Bạn có hiểu tư tưởng đệ quy của hàm convert không?

Nói một cách đơn giản, bạn cần xây dựng keyword từ trái sang phải, do vậy bạn convert phần bên trái trước, ghép với type rồi mới ghép tiếp phần bên phải vào.

Còn bạn hỏi có code nào đơn giản hơn thì mình khẳng định luôn là không. Đây là code ngắn nhất, trực quan nhất và đơn giản nhất. Bạn thích dài hơn thì có thể khử đệ quy kết hợp với cấu trúc dữ liệu stack.

Code ES < 6:

function convert(obj) {
  if (obj là string) {
    return obj;
  }
  return convert(obj.left) + " " + obj.type + " " + convert(obj.right);
}
4 Likes

Cảm ơn bạn đã hỗ trợ !!! thanks

Cảm ơn anh rất nhiều khi bỏ time ra hỗ trợ em. A có thể giải thích sơ qua về phần return được không ạ, E vẫn hơi mơ hồ đoạn đó(E đã hiểu cách chạy của đệ quy và bắt buộc có đk dừng). E đã áp dụng và đã giải quyết xong !!

1 Like

Hiểu được cách chạy của đệ quy là hiểu được code rồi bạn, bạn thử chạy tay lại là rõ.

2 Likes

Dạ vâng, em cảm ơn !!!

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?