Короткий ответ НЕТ, у нас на этом этапе в 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;
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);
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);
Вы можете использовать метод уменьшения . Надеюсь, это поможет вам!
, но я хочу изменить его на формат, в котором мне нужно выбрать одно из вложенных значений и спроецировать их как ключи верхнего уровня
blockquote>Вы можете установить атрибут для формирования группы быть динамичным
'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);