使用javascript和vue映射不同类型的数据

时间:2018-06-21 17:19:20

标签: javascript vue.js

解析/映射 i.values 中的2种不同类型的数据/对象:

我可以在控制台中看到

class a {
    protected const SOMETHING = 'This is a!';

    public static function outputSomething() {
        return static::SOMETHING;
    }
}

class b extends a {
    //protected const SOMETHING = 'This is b!';
}

echo (new b())::outputSomething();

下一类数据/对象是:

(3) [1, 2, 3,__ob__: Observer] 
  0:1
  1:2
  2:3
  length:3
  __ob__: Observer {value: Array(3), dep: Dep, vmCount: 0}
  __proto__:Array

这是我要解析/映射的代码:

{__ob__: Observer}
  no: "I'm not"
  not_sure: "I'm not sure"
  yes: "I'm sure"
  __ob__:Observer {value: {…}, dep: Dep, vmCount: 0}

代码在最后一个对象中失败:否:“我不是” ...

this.cstInputs.map(i => {
  i.values = i.values.map((k, v) => {
    return {
      value: v,
      label: k
    }
  });
}

我该如何分析这些不同类型的数据或通过Uncaught (in promise) TypeError: i.values.map is not a function... 之类的其他方法来区分它们以获得密钥对值?

谢谢

2 个答案:

答案 0 :(得分:0)

您似乎需要确定i.values是数组还是对象(没有.map()方法)。

这里有一个很好的讨论:In javascript how can we identify whether an object is a Hash or an Array?

可接受的答案提供以下代码段:

if(i.values.constructor == Array){
}
else if(i.values.constructor == Object){
}

答案 1 :(得分:0)

对象没有一个method = map(),因此抛出了错误Uncaught (in promise) TypeError: i.values.map is not a function

对于您的用例,使用Object.entries应该更好。

就像下面的演示一样:

let cstInputs = [
  {'values': [1, 2, 3]},
  {'values': 
            {
              'no':'I am no', 
              'not_sure': 'I am not sure', 
              'yes': 'I am yes'
            } 
  }
]

let result = cstInputs.map( (i) => {
  return Object.entries(i.values).map( (item) => {
    return {
      value: item[0], 
      label: item[1]
    }
  })
})

console.log(result)