#javascript
#javascript
Вопрос:
У меня есть массив, к которому прикреплены некоторые свойства, подобные этому:
let arVar = [[{a: 1, b:2},{c:3, d:4}, {e:5}]]
arVar.item_id = "9";
arVar.type_id = "1";
v
является arVar
в моем коде ниже массивом внутри ledgerTransactionsArray
. v
обладает свойствами, которые мне нужны, чтобы я мог добавить его в новый v
.
Я не знаю, какие или сколько свойств v
может иметь, и будет ли у него вообще какое-либо свойство
Я хочу получить arVar.type_id
и arVar.item_id
отдельно, чтобы я мог присоединить их к другому массиву:
$scope.ledgerTransactionsArray = $scope.ledgerTransactionsArray.map(function(v) {
//v is the array with properties that i need to attach to new v
//v has item_id, type_id
if (Array.isArray(v)) {
console.log(v, "typeidcheck");
v = v.map(function(subArrayObj) {
for (let key in subArrayObj) {
if (
key == "credit_amount" || key == "debit_amount" ||
key == "credit_total" || key == "debit_total"
) {
if (subArrayObj[key]) {
subArrayObj[key] = parseFloat(subArrayObj[key]).toLocaleString(undefined, {
maximumFractionDigits: 2,
minimumFractionDigits: 2
});
}
}
}
return subArrayObj;
})
}
})
Комментарии:
1. Вместо того, чтобы делать
v = v.map()
, используйтеforEach
. Таким образом, вам не нужно переназначать нецелочисленные ключи обратно в новый массив, возвращенный изmap
2. @adiga да .. ты прав. Спасибо
Ответ №1:
Никакой магии. Просто используйте Object.keys
. Это работает даже для массивов.
> let arVar = [[{a: 1, b:2},{c:3, d:4}, {e:5}]]
> arVar.item_id = "9";
'9'
> arVar.type_id = "1";
'1'
> Object.keys(arVar)
[ '0', 'item_id', 'type_id' ]
Если вам нужно удалить числовые индексы, как '0'
грубый взлом (не рекомендуется) будет:
> Object.keys(arVar).filter(k => !/d /.test(k))
[ 'item_id', 'type_id' ]
или лучше, как указывает Nisarg:
> Object.keys(arVar).filter(k => isNaN(k))
[ 'item_id', 'type_id' ]