我想在angular2中创建一个关联数组,但还没找到方法
这就是我试过的
onSubmit(){
let inputfield:any[] = [];
for(var i=0; i<this.inspectionform.value["inputfileds"].length; i++){
if(this.inspectionform.value["inputfileds"][i]["input"] != ""){
//here i need help
inputfield.push( i : this.inspectionform.value["inputfileds"][i]["input"]) //this returns a syntax error
}
}
} 所以我真正期待的是将一个键和值传递给数组
像
这样的东西1:sdbhd//pass this to the array
在for循环中我尝试了
//inside the for loop
let arrayval = [];
arrayval.push(this.inspectionform.value["inputfileds"][i]["input"])
arrayval.push(i)
inputfield.push(arrayval);
每次具有这种性质时都会创建一个新对象
0:njnf
1:1(value of i)
答案 0 :(得分:1)
Javascript没有关联数组,只需使用{}
或新的Map
api
let xxxMap = new Map();
xxxMap.set('key1', 'value 1');
xxxMap.set('key2', 5);
console.log(xxxMap.get('key1'));
从那里了解更多信息:Map in Javascript
答案 1 :(得分:1)
你可以使用Map,但我选择使用普通对象;
<强>演示强>
const mything = {}
mything.foo = 1
mything.foo === mything['foo'] // true
mything['bar'] = 1337;
mything.bar === 1337 // true
mything.foo-bar = 1 // ERROR: can't have dashes
mything['foo-bar'] = 1 // Works
在ES6或任何相对现代的浏览器中,您可以使用Object.keys(mything)
获取所有密钥。对于较旧的环境,您必须使用for ... in
循环键,如此polyfill中所示:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
您必须注意的另一件事是在您的属性链中定义上一个项目。例如,如果你有
var foobar = {
foo: { bar: 1 }
}
然后您 CAN 执行foobar.foo.bar.toString()
获取"1"
,但如果您尝试执行foobar.foo.bang.toString()
,则会出现错误原因bang
未在foo
对象上定义。
您可以通过执行foobar.foo.bang && foobar.foo.bang.toString()
之类的保护检查来解决此问题,如果存在bang,则仅运行toString方法。
更简单的方法是使用lodash
,它会为您提供_.get
和_.set
,分别负责保护和创建缺少的属性。< / p>