Как изменить вложенное значение в словаре в качестве ключа верхнего уровня

Короткий ответ НЕТ, у нас на этом этапе в CSS нет parent selector, но если вы все равно не хотите менять элементы или классы, второй вариант использует JavaScript, что-то вроде этого:

var activeATag = Array.prototype.slice.call(document.querySelectorAll('a.active'));

activeATag.map(function(x) {
  if(x.parentNode.tagName === 'LI') {
    x.parentNode.style.color = 'red'; //your property: value;
  }
});

или более короткий путь, если вы используете jQuery в своем приложении:

$('a.active').parents('li').css('color', 'red'); //your property: value;
1
задан Dacre Denny 28 March 2019 в 04:40
поделиться

3 ответа

var data = {
  "audioResponse": [{
      "speaker": "spk1",
      "startTime": "0.0",
      "endTime": "15.239",
      "emotion": "neutral",
      "emotionScore": "0"
    }, {
      "speaker": "silence",
      "startTime": "15.240",
      "endTime": "16.900",
      "emotion": "NA",
      "emotionScore": "NA"
    }, {
      "speaker": "spk2",
      "startTime": "16.932",
      "endTime": "27.320",
      "emotion": "happy",
      "emotionScore": "2"
    }, {
      "speaker": "spk1",
      "startTime": "27.977",
      "endTime": "37.900",
      "emotion": "anger",
      "emotionScore": "-3"
    }]
};

var result = {
  audioResponse: []
};

for (var item of data.audioResponse) {
  var existed = result.audioResponse.find(x => x[item.speaker]);
  if (!existed)
    result.audioResponse.push({
      [item.speaker]: []
    });

  existedArray = result.audioResponse.find(x => x[item.speaker])[item.speaker];

  var copy = {...item};
  delete copy.speaker;
  existedArray.push(copy);
}

console.log(result);

0
ответ дан Slava Utesinov 28 March 2019 в 04:40
поделиться
var inputList = {
   "audioResponse": [

  {
     "speaker":"spk1",
     "startTime": "0.0",
     "endTime": "15.239",
     "emotion": "neutral",
     "emotionScore": "0"
  },

  {
     "speaker":"silence",
     "startTime": "15.240",
     "endTime": "16.900",
     "emotion": "NA",
     "emotionScore": "NA"
  },

  {
     "speaker":"spk2",
     "startTime": "16.932",
     "endTime": "27.320",
     "emotion": "happy",
     "emotionScore": "2"
  },

  {
     "speaker":"spk1",
     "startTime": "27.977",
     "endTime": "37.900",
     "emotion": "anger",
     "emotionScore": "-3"
  } 
]}




var result = inputList.audioResponse.reduce((acc, {speaker, ...rest})=>{
    acc['audioResponse'][speaker] = (acc['audioResponse'][speaker]) || [];
    acc['audioResponse'][speaker].push(rest);
    return acc;
}, {audioResponse:{}});

console.log(result);

Вы можете использовать метод уменьшения . Надеюсь, это поможет вам!

0
ответ дан Saurabh 28 March 2019 в 04:40
поделиться

, но я хочу изменить его на формат, в котором мне нужно выбрать одно из вложенных значений и спроецировать их как ключи верхнего уровня

Вы можете установить атрибут для формирования группы быть динамичным

'use strict';

let attribute = 'speaker'; // can be 'speaker' or 'emotion' or 'emotionScore'
let output = {
  audioResponse: []
};

for (let response of data.audioResponse) {
  let groupKey = response[attribute];
  let group = output.audioResponse[groupKey];
  delete response[attribute]; //remove the key
  if (group) {
    group.push(response);
  } else {
    group = [response];
  }
  output.audioResponse[groupKey] = group;
}

console.log(output);
0
ответ дан Sridhar 28 March 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: