2017-02-20 6 views
-1

У меня есть этот объект: keyValue: {key: string, value: number} [];Значение типа TypeScript/JavaScript push

Я хочу, чтобы добавить новый элемент в массив из двух значений, например:

let tmpTabKV : { key : string , value : number}[]; 
[...] 
tmpTabKV.push({projet.libelle, statKV.value}); 
[...] 
keyValue = tmpTabKV; 

Я попробовал несколько синтаксиса и видел это: How can I add a key/value pair to a JavaScript object?

Но я не вижу никакого ключа для создания нового объекта. Использование массива делает меня error

tmpTabKV.push(Array(projet.libelle, statKV.value)); 

ответ

3

Вы должны быть толкая object literal в массив

let tmpTabKV : { key : string , value : number}[] = [] 
tmpTabKV.push({key:projet.libelle, value:statKV.value}); 
+0

Кроме того, необходимо инициализировать массив: 'пусть tmpTabKV: {ключ: строка, значение: число} [] = [];' –

+0

@AJRichardson Спасибо. – Jamiec

0

Согласно let tmpTabKV : { key : string , value : number}[]; вобще:

tmpTabKV.push({key: project.libelle, value: statKV.value})

но Я думаю, вы этого хотите:

tmpTabKV.push({[project.libelle]: statKV.value})

+0

Нет, это не соответствует его интерфейсу '{key: string, value: number}' –

+0

Можете ли вы использовать литерал массива как ключ в объекте? – Jamiec

+0

Я знаю, но я думаю, что это то, чего он хочет, и его интерфейс неправильный. Вот почему я сначала говорю «по его интерфейсу». –

-1

вы должны нажать новый объект:

interface KeyValuePair{ 
    key: string: 
    value: number; 
} 

let tmpTabKV: KeyValuePair[]; 

tmpTabKV.push(new {key: projet.libelle, value: statKV.value}); 
+1

Вам не нужно «новое» ключевое слово –

+0

^^ «не нужно» => «не может быть там» :-) –

0

Несколько проблем, я заметил: первый, вы толкая новый объект в массив, как если бы он был сам по себе является массив. То есть, вы полагаетесь на положение значений для сопоставления с положением клавиш. В объекте ключи всегда неупорядочены и поэтому должны всегда указываться.

tmpTabKV.push({key: project.libelle, value: statKV.value}) 

Что вы делаете с {project.libelle, startKV.value} делает объект с shorthand syntax, который не будет работать в вашем примере.

В машинописном тексте, если вы хотите ограничить ключи в объекте, реализуйте интерфейс.

interface KeyValue { key: string, value: number } 

let tmpTabKV: KeyValue[]; 

// ... 

tmpTabKV.push({key: project.libelle, value: number}); 

 Смежные вопросы

  • Нет связанных вопросов^_^