Вы должны объявить obj.item как массив, и вместо приравнивания значений вы должны помещать их в массив
const array = [{
name: []
}];
const test = `result1
result2
result3`;
const ways = test.split(/[\n\r]+/).map(aaa => (aaa));
array.forEach((obj) => {
obj.item = [];
ways.forEach((element) => {
obj.item.push({
result: element
});
});
});
console.log(array)
Можно сделать это использование, шаблоны - пробуют что-то вроде этого:
template< typename T, int min, int max >class LimitedValue {
template< int min2, int max2 >LimitedValue( const LimitedValue< T, min2, max2 > &other )
{
static_assert( min <= min2, "Parameter minimum must be >= this minimum" );
static_assert( max >= max2, "Parameter maximum must be <= this maximum" );
// logic
}
// rest of code
};
библиотека Boost Constrained Value <глоток> (1) глоток> позволяет, Вы для добавления ограничиваете к типам данных.
, Но необходимо ли считать совет" , Почему типы C++ с плавающей точкой не должны использоваться с ограниченными объектами? ", когда Вам нравится использовать его с типами плавающими (как проиллюстрировано в Вашем примере).
<глоток> (1) глоток> библиотека Boost Constrained Value еще не является официальной библиотекой Boost.
В данный момент это невозможно портативным способом из-за правил C++ о том, как методы (и следовательно, конструкторы) называют даже с аргументами константы.
В C++ 0x стандарт, у Вас могла быть константа-expr, которая позволит такой ошибке быть произведенной все же.
(Это принимает, Вы хотите, чтобы он бросил ошибку, только если фактическое значение недопустимо. Если диапазоны не соответствуют, можно достигнуть этого)
Одна вещь помнить о шаблонах состоит в том, что каждый вызов уникального набора шаблонных параметров завершит генерацию "уникального" класса, для которого сравнения и присвоения генерируют ошибку компиляции. Могут быть некоторые гуру метапрограммирования, которые могли бы знать, как работать вокруг этого, но я не один из них. Мой подход должен был бы реализовать их в классе с проверками на этапе выполнения и перегрузил сравнение и операторы присваивания.
Я хотел бы предложить альтернативную версию для решения Kasprzol: предложенный подход всегда использует границы интервала типа. Можно получить еще некоторую гибкость и безопасность типов с реализацией, такой как это:
template<typename T, T min, T max>
class Bounded {
private:
T _value;
public:
Bounded(T value) : _value(min) {
if (value <= max && value >= min) {
_value = value;
} else {
// XXX throw your runtime error/exception...
}
}
Bounded(const Bounded<T, min, max>& b)
: _value(b._value){ }
};
Это позволит средству проверки типа ловить очевидные присвоения мисс, такие как:
Bounded<int, 1, 5> b1(1);
Bounded<int, 1, 4> b2(b1); // <-- won't compile: type mismatch
Однако более усовершенствованных отношений, где Вы хотите проверить, включен ли диапазон одного шаблонного экземпляра в диапазоне другого экземпляра, нельзя выразить в шаблонном механизме C++.
Каждая Ограниченная спецификация становится новым типом. Таким образом компилятор может проверить на несоответствия типов. Это не может проверить на более усовершенствованные отношения, которые могли бы существовать для тех типов.