在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ js 數(shù)據(jù)操作問題

js 數(shù)據(jù)操作問題

問題描述

用戶選擇了三個(gè)數(shù)組 如下

let colorOptions = ['紅色','黃色']
let sizeOptions = [36,37,38,39,40,41]
let otherSizeOptions = ['A','B','C','D']

我想要如下結(jié)果
圖片描述

現(xiàn)在這個(gè)問題還沒有解決出來(lái),希望大佬們同學(xué)們幫忙解答一下,非常感謝,如果附有解題思路更好,我數(shù)據(jù)操作這塊好弱,也是一直在學(xué)習(xí)。謝謝

回答
編輯回答
墨染殤

用vue寫了一個(gè)demo,能運(yùn)行的,樣式自己調(diào)整吧

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
<div id="container">
  <table>
    <tr>
      <td v-for="name in keysNames">{{name}}</td>
      <td v-for="prop in props">{{prop}}</td>
    </tr>
    <tr v-for="(item, itemIndex) in list" :key="itemIndex">
      <td v-for="key in keys">{{item[key]}}</td>
      <td v-for="(prop, propIndex) in item.props" :key="propIndex" @click="toggleItem(itemIndex, propIndex)">{{prop}}</td>
    </tr>
  </table>
</div>
  <script src="https://cdn.bootcss.com/vue/2.5.17-beta.0/vue.js"></script>
  <script type="text/javascript">
  var app = new Vue({
    el:"#container",
    data:{
      keys: [],
      props: [],
      list: [],
      keysNames: []
    },
    created() {
      this.foo(['紅色','黃色'],[36,37,38,39,40,41],['A','B','C','D'])
    },
    methods:{
      foo: function(colorOptions, sizeOptions, otherSizeOptions){
        let keys = ['order']
        let keysNames = ['序號(hào)']
        let list = []
        let hasOtherSize = false
        let order = 1
        if(colorOptions == null || colorOptions.length === 0){
          console.error('colorOptions is empty')
          return
        }

        if(sizeOptions == null || sizeOptions.length === 0){
          console.error('otherSizeOptions is empty')
          return
        }
        this.props = sizeOptions;

        keys.push('color')
        keysNames.push('顏色')
        
        if(otherSizeOptions != null && otherSizeOptions.length > 0){
          hasOtherSize = true
          keys.push('otherSize')
          keysNames.push('其他顏色')
        }

        colorOptions.forEach(color => {
          console.log('1111')
          if(hasOtherSize){
            otherSizeOptions.forEach(otherSize => {
              let obj = {}
              obj.color = color
              obj.otherSize = otherSize
              obj.props = new Array(sizeOptions.length).fill(true)
              obj.order = order
              order ++
              list.push(obj)
            })
          } else {
            let obj = {}
            obj.color = color
            obj.props = new Array(sizeOptions.length).fill(true)
            obj.order = order
            order ++
            list.push(obj)
          }
        })

        console.log(list)
        this.keys = keys;
        this.keysNames = keysNames
        this.list = list
      },
      toggleItem(itemIndex, propIndex){
        let list = this.list
        list[itemIndex].props[propIndex] = !list[itemIndex].props[propIndex] 
        this.$set(this.list[itemIndex].props, list[itemIndex].props,true )
      }
    }
  })
  </script>
</body>
</html>
2017年3月24日 17:31
編輯回答
臭榴蓮

用的是vue嗎?如果用的是vue的話那就考慮用computed,根據(jù)三個(gè)選擇結(jié)果,計(jì)算出顯示的數(shù)組,然后勾選36,37,38這些主尺寸的時(shí)候,再用computed的set函數(shù)去設(shè)置sizeOptions

2018年3月23日 01:46
編輯回答
孤星

謝邀,花了些時(shí)間寫了個(gè)demo,希望是你想要的效果。https://jsfiddle.net/fd1ovqp2...

2017年4月25日 07:20