js 循环取出对象的属性

一个对象

state={
    new1:1,
    new2:2,
    new3:3,
    old1:1,
    old2:2
}

我如果想循环取出 state.new1 state.new2state.new3的值应该怎么取
不取出old1 old2

例如第一次循环得到 state.new1 第二次得到 state.new2

for(var i=0;i<3;i++){
    第一次循环得到 state.new1 
    第二次得到 state.new2
}
阅读 3.3k
5 个回答
let state={
    new1:1,
    new2:2,
    new3:3,
    old1:1,
    old2:2
};
const BLACK_LIST = ["old1", "old2"];

for(let p in state) {
    if(BLACK_LIST.indexOf(p) == -1)
        console.log(p, state[p])
}
for(var value in state){
    console.log(state[value])
}

对象用for in循环

const state = {
  news1: 1,
  news2: 2,
  news3: 3,
  old: 1,
  old2: 2
}
var arr = []
for (let o in state) {
  if (o.indexOf('news') > -1) {
    arr.push({[o]: state[o]})
  }
}
console.log(arr)

代码

for(var key in state){
   if(key.substr(0,3)==='new'){
        console.info(state[key])
   }
}

效果图:
clipboard.png

可以把不想枚举的属性的enumerable设置为false,这样for in的话就不会循环出来了:

function notEnum (obj, keys) {
  keys.forEach(key => {
    let def = Object.getOwnPropertyDescriptor(obj, key)
    def.enumerable = false
    Object.defineProperty(obj, key, def)
  })
}
var state = {
    new1:1,
    new2:2,
    new3:3,
    old1:1,
    old2:2
}
notEnum(state, ['old1', 'old2']) // 把old1和old2设置为不可枚举属性
for (let i in state) {
  console.log(i)
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题