На самом деле, версии стандарта C ++ до того, как C ++ 11 определили ключевое слово «export», [] , можно просто объявить шаблоны в файле заголовка и реализовать их в другом месте.
К сожалению, ни один из популярных компиляторов не реализовал это ключевое слово. Единственный, о котором я знаю, - это интерфейс, написанный Edison Design Group, который используется компилятором Comeau C ++. Все остальные настаивали на том, что вы пишете шаблоны в заголовочных файлах, нуждающихся в определении кода для надлежащего создания экземпляра (как уже указывали другие).
В результате стандартная комиссия ISO C ++ решила удалить export
особенность шаблонов, начинающихся с C ++ 11.
Вы можете использовать Array#slice
для вставки желаемого элемента и итерации arrayB
с конца, так как каждый сплайсинг изменяет индексы после индекса вставки.
var arrayA = [{ type: 'card', id: 1 }, { type: 'card', id: 2 }, { type: 'card', id: 3 }, { type: 'card', id: 4 }, { type: 'card', id: 5 }],
arrayB = [{ type: 'pro-tip', id: 10 }, { type: 'pro-tip', id: 11 }],
place = 2,
i = arrayB.length;
while (i) {
arrayA.splice(i * place, 0, arrayB[--i]);
}
console.log(arrayA);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Вы можете использовать reduce
, если исходный массив не должен изменяться.
const arrayA = [
{
type: 'card',
id: 1
},
{
type: 'card',
id: 2
},
{
type: 'card',
id: 3
},
{
type: 'card',
id: 4
},
{
type: 'card',
id: 5
},
];
const arrayB = [
{
type: 'pro-tip',
id: 10
},
{
type: 'pro-tip',
id: 11
},
];
const res = arrayA.reduce((acc, a, i) => {
const b = arrayB[(i + 1) / 2 - 1];
return [...acc, a, ...(b ? [b] : [])];
}, []);
console.log(res);
Вот мое итерационное решение, использующее for
countA = arrayA.length;
countB = arrayB.length;
merged = [];
for (var i = 0, j = 0, m = 0; i < countA; i ++, m ++) {
if (i > 0 && i%2 == 0 && typeof arrayB[j] !== 'undefined') {
merged[m] = arrayB[j];
j ++;
m ++;
}
merged[m] = arrayA[i];
}
// if you'd like to place all remaining arrayB elements after arrayA is exhausted
if (countB > j) {
for (i = j; i < countB; i++, m ++) {
merged[m] = arrayB[i];
}
}
array.splice
. – Diego de Oliveira 13 July 2018 в 17:24array.splice
. Я решил использовать это решение, и я планирую сделать его более гибким в будущем. Благодаря! – Diego de Oliveira 13 July 2018 в 20:09