Как принимать значения в объекте, если они совпадают с другим свойством objects

#javascript #json

#javascript #json

Вопрос:

У меня есть следующий объект ниже, который я хотел бы повторить, и если конкретный объект properties.title такой же, как любой другой объект, возьмите имя автора и добавьте его к новому объекту (я подумал, что добавить его к новому объекту будет проще).

бизнес1

 {
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "geometry": {
                "type": "Point",
                "coordinates": [
                    -89.535,
                    34.3654
                ]
            },
            "place_name": "University, Mississippi, United States",
            "properties": {
                "title": "Using Adversarial Autoencoders for Multi-Modal Automatic Playlist Continuation",
                "authorTitle": "Florian Mai"
            }
        },
        {
            "type": "Feature",
            "geometry": {
                "type": "Point",
                "coordinates": [
                    10.14,
                    54.33
                ]
            },
            "place_name": "24105, Kiel, Schleswig-Holstein, Germany",
            "properties": {
                "title": "Using Adversarial Autoencoders for Multi-Modal Automatic Playlist Continuation",
                "authorTitle": "Iacopo Vagliano"
            }
        },
        {
            "type": "Feature",
            "geometry": {
                "type": "Point",
                "coordinates": [
                    10.14,
                    54.33
                ]
            },
            "place_name": "pretend place",
            "properties": {
                "title": "new title",
                "authorTitle": "joe blogs"
            }
        }

    ],
    "properties": "",
    "authors": ""
}
  

Объект, который я хотел бы (improvedObj)

 var improvedObj = {

    obj1 = {
      title:'Using Adversarial Autoencoders for Multi-Modal Automatic Playlist Continuation"',
      authorList: 'Florian Mai,Iacopo Vagliano'
    },
    obj2 = {
        title:'new title',
        authorList: 'joe blogs
  }

}
  

Что я пробовал

 extractorArray = []

for(i=0; i<business1.features.length;i  ){
extractorArray.push(business1.features[i].properties)
}
console.log('extractor', extractorArray)

var extractedValues = extractorArray.map((title) => (title));
var extractedAuthor = extractorArray.map((authorTitle) => (authorTitle))

    var improvedObj = {

      objList : {
        title:extractedValues,
        authorList: extractedAuthor
      }
    }
  

вышесказанное проходит через каждый объект, берет его свойства и передает его в extractorArray (чтобы я мог использовать для него .map функцию). И затем, на данный момент мои размышления не работают, поскольку я просто копирую из массива в объекте (там нет ничего такого, что могло бы указывать, совпадает ли заголовок с его автором).

Комментарии:

1. Я не мог точно понять, что вы хотите сделать. Вы хотите получить все объекты с одинаковыми именами? Или вы хотите просто просмотреть список и проверить, имеет ли другой объект, заданный объектом A, то же свойство.title, что и A?

2. 2-е предложение. Я хочу просмотреть другой объект с тем же названием, и если другой объект имеет то же название, указать автора, прикрепленного к объекту. И добавьте заголовок с авторами к новому объекту.

Ответ №1:

Я предполагаю, что ваш улучшенный объект на самом деле является array, поправьте меня, если я ошибаюсь. Для вас должно сработать следующее

 const authorsByBook = k.features.map(feature => feature.properties).reduce((byTitle, feature) => {
    if(!byTitle[feature.title]) byTitle[feature.title] = [];
    byTitle[feature.title].push(feature.authorTitle);
return byTitle
}, {})

const improvedObject = Object.keys(authorsByBook).map(title => ({ title, authorList: authorsByBook[title].join(',')}))
  

Первая часть перебирает список и создает объект структуры {title: authors[]}. После этого на основе titles разбивает его на массив с objects {title, }

Комментарии:

1. Было бы слишком сложно и халтурно также получить координаты? Таким образом, в новом массиве будет коллекция координат, прикрепленных точно так же, как у авторов?