Вот решение:
const fontList = params.fontList.map((font) => {
const uniquesubset = _.compact(_.map(_.uniqWith(font.webFontList, (item, itemTwo) => _.isEqual(item.subset, itemTwo.subset)).map(_.property('subset'))));
if (uniquesubset.length > 0) {
const subsets = uniquesubset.map((subset) => {
const webFontList = _.compact(_.map(font.webFontList, webFont => (_.isEqual(webFont.subset, subset) ? _.pick(webFont, ['fontFormat', 'src', ]) : undefined)));
const updatedWebFontList = _.compact(webFontList);
return {
subset,
webFontList: updatedWebFontList,
};
});
return {
subsets,
sourceFont: font.sourceFont,
};
}
return {
sourceFont: font.sourceFont,
subsets: {
webFontList: font.webFontList,
},
};
});
Я буду дополнительно оптимизировать его. Но это дает мне именно то, что мне нужно.
как насчет того, чтобы использовать массив?
data: {
...
'select' : ['value1', 'value2', 'value3'],
...
},
править: ах извините вот код, несколько протестов:
'select' : $('#myselectbox').serializeArray(),
для serializeArray () для работы, хотя, все элементы формы должны иметь атрибут имени. значение 'select'
выше будет массив объектов, содержащих имя и значения выбранных элементов.
'select' : [
{ 'name' : 'box', 'value' : 1 },
{ 'name' : 'box', 'value' : 2 }
],
избранное поле для создания вышеупомянутого результата было бы:
<select multiple="true" name="box" id="myselectbox">
<option value="1" name="option1" selected="selected">One</option>
<option value="2" name="option2" selected="selected">Two</option>
<option value="3" name="option3">Three</option>
</select>
Благодаря ответу от @Owen я заставил этот код работать.
Для избранного поля с идентификатором = "mySelect" несколько = "верный"
var mySelections = [];
$('#mySelect option').each(function(i) {
if (this.selected == true) {
mySelections.push(this.value);
}
});
$.ajax({
type: "post",
url: "http://myServer" ,
dataType: "text",
data: {
'service' : 'myService',
'program' : 'myProgram',
'selected' : mySelections
},
success: function(request) {
result.innerHTML = request ;
}
}); // End ajax method
Правильный способ представить набор из нескольких выбранных опций - использовать массив , присвоив тегу SELECT суффикс [].
Проблема в том, что она неправильно обрабатывается методом jQuery serialize ().
Для такого оператора SELECT infact:
<select name="a[]"> <option value="five">5</option> <option value="six">6</option> <option value="seven">7</option> </select>
serialize отправляет этот массив: a [] = 0 & a [] = 1 & a [] = 2 , полученный PHP следующим образом:
[a] => Array ( [0] => 0 [1] => 1 [2] => 2 )
, где теряются реальные ценности.