programing

데이터 제거 기능을 사용하여 중첩된 배열 '항목'의 데이터를 추가 및 삭제하는 방법

procenter 2022. 8. 17. 23:15
반응형

데이터 제거 기능을 사용하여 중첩된 배열 '항목'의 데이터를 추가 및 삭제하는 방법

항목에 중첩된 배열 'Men'을 삭제하고 싶습니다.또한 데이터 추가 및 데이터 삭제 기능을 사용하여 중첩된 배열 'Human'에 새로운 데이터를 추가하고 싶습니다.슬라이스 앤 팝 기능을 시도해 봤지만 아이에게는 효과가 없었다.

이것은 html 코드입니다.

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale">
<title>Graph</title>
</head>
<body>
    <div id="app">
    <ul>
      <li v-for="(item,index) in items">
        {{item.root}} - 
        <button v-on:click="addingData(item.id)"> + </button>
        <button v-on:click="removingData(index)"> - </button> 

        <ul>
          <li v-for="(child, child_index) in item.childs">
            {{child.root}} - <button v-on:click="addingData(child_index)"> + </button>
            <button v-on:click="removingData(child_index)"> - </button> 
            <ul>
                <li v-for="(childLevel2, childLevel2_index) in child.childs">
                  {{childLevel2.root}} - 
                  <button v-on:click="addingData(child_index)"> + </button>
                  <button v-on:click="removingData(childLevel2_index)"> - </button> 
                </li>
              </ul>
          </li>
        </ul>
      </li>
    </ul>
  </div>

    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
    <script src="main.js"></script>
</body>
</html>

Javascript 코드입니다.

var app = new Vue({
  el:'#app',
    data:{
    items: [
      {
        id: 1, root : 'Animal', childs:[
          {id: 3, root: 'Human', childs:[
            {id: 4, root: 'Men' ,childs: null},
            {id: 5, root: 'women', childs: null}
          ]},
          {id: 6, root: 'bunny', childs: null},
          {id: 7, root: 'fish', childs: null}
        ]
      },
      {id: 2, root : 'Vehicle', childs: [
        {id: 8, root: 'Car'},
        {id: 9, root: 'Bike'}
      ]}
    ]
    },
    methods: {
    addingData: function(index){
      this.items.push({root : 'House'})
      console.log(index)
    },
    removingData: function(index){
      console.log(index);
      //this.items.splice(index, 1);
      Vue.delete(this.items, index);
    }
  }
})

누군가 봐주시면 정말 감사하겠습니다!

Vue.delete 오브젝트용이지 어레이용이 아닙니다.당신은 필요합니다. 그래서 당신의 코드를 만들었습니다.

https://jsfiddle.net/efrat19/t95vs0yd/

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale">
<title>Graph</title>
</head>
<body>
    <div id="app">
    <ul>
      <li v-for="(item,index) in items">
        {{item.root}} - 
        <button v-on:click="addingData(index)"> + </button>
        <button v-on:click="removingData(index)"> - </button> 

        <ul>
          <li v-for="(child, child_index) in item.childs">
            {{child.root}} - <button v-on:click="addingDataToChild(index,child_index)"> + </button>
            <button v-on:click="removingDataFromChild(index,child_index)"> - </button> 
            <ul>
                <li v-for="(childLevel2, childLevel2_index) in child.childs">
                  {{childLevel2.root}} - 
                  <button v-on:click="addingDataToChild2(index,child_index,child_index)"> + </button>
                  <button v-on:click="removingDataFromChild2(index,child_index,childLevel2_index)"> - </button> 
                </li>
              </ul>
          </li>
        </ul>
      </li>
    </ul>
<pre>{{items}}</pre>
  </div>
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
    <script src="main.js"></script>
</body>
<script>
var main=new Vue({
  el:'#app',
    data:{
    items: [
      {
        id: 1, root : 'Animal', childs:[
          {id: 3, root: 'Human', childs:[
            {id: 4, root: 'Men' ,childs: []},
            {id: 5, root: 'women', childs: []}
          ]},
          {id: 6, root: 'bunny', childs: []},
          {id: 7, root: 'fish', childs: []}
        ]
      },
      {id: 2, root : 'Vehicle', childs: [
        {id: 8, root: 'Car'},
        {id: 9, root: 'Bike'}
      ]}
    ]
    },
    methods: {
    addingData: function(index){
      this.items[index].childs.push({root : 'House', childs: []})
    },
    removingData: function(index){
      this.items.splice(index, 1);
    },
    addingDataToChild: function(index,child_index){
      this.items[index].childs[child_index].childs.push({root : 'House', childs: []})
    },
    removingDataFromChild: function(index,child_index){
      this.items[index].childs.splice(child_index, 1);
    },
    addingDataToChild2: function(index,child_index,child2_index){
      this.items[index].childs[child_index].childs[child2_index].childs.push({root : 'House', childs: []})
    },
    removingDataFromChild2: function(index,child_index,child2_index){
      this.items[index].childs[child_index].childs.splice(child2_index, 1);
    },
  }
})
<script/>
</html>

각 루프에 따라 함수를 만들어 보십시오.객체를 전송하여 함수 내에서 수정할 수 있습니다.콘솔 로그에 예시를 남겼습니다.그것이 당신에게 출발점을 주는 데 도움이 되기를 바랍니다.

var app = new Vue({
  el:'#app',
    data:{
    items: [{
      id: 1, 
      root : 'Animal', 
      childs:[{
        id: 3, 
        root: 'Human', 
        childs:[{
          id: 4, 
          root: 'Men',
          childs: null
        },
        {
          id: 5, 
          root: 'women', 
          childs: null
        }]
      },
      {
        id: 6, 
        root: 'bunny', 
        childs: null
      },
      {
        id: 7, 
        root: 'fish', 
        childs: null
      }]
    }]
  },
    methods:{
    addingDataLevelOne: function(items){
      console.log(items)
      items.push(this.items[0])
    },
    removeLevelOne: function(items){
      console.log(items)
      items.pop()
    },
  }
})
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale">
<title>Graph</title>
</head>
  <body>
      <div id="app">
      <ul>
        <li v-for="item in items">
          {{item.root}} - 
          <button v-on:click="addingDataLevelOne(items)"> + </button>
          <button v-on:click="removeLevelOne(items)"> - </button> 
          <ul>
            <li v-for="child in item.childs">
              {{child.root}} - 
              <button> + </button>
              <button> - </button> 
              <ul>
                <li v-for="childLevel2 in child.childs">
                  {{childLevel2.root}} - 
                  <button> + </button>
                  <button> - </button> 
                </li>
              </ul>
            </li>
          </ul>
        </li>
      </ul>
    </div>
      <script src="https://cdn.jsdelivr.net/npm/vue"></script>
      <script src="main.js"></script>
  </body>
</html>

색인이 해제되었습니다.

Vue.delete(this.items[0].childs[0].childs, 0);

편집: 검색 방법

var app = new Vue({
  el:'#app',
    data:{
    items: [
      {
        id: 1, root : 'Animal', childs:[
          {id: 3, root: 'Human', childs:[
            {id: 4, root: 'Men' ,childs: null},
            {id: 5, root: 'women', childs: null}
          ]},
          {id: 6, root: 'bunny', childs: null},
          {id: 7, root: 'fish', childs: null}
        ]
      },
      {id: 2, root : 'Vehicle', childs: [
        {id: 8, root: 'Car'},
        {id: 9, root: 'Bike'}
      ]}
    ]
    },
    methods: {
    addingData: function(index){
      this.items.push({root : 'House'})
    },
    findItem: (item, el) => {
      var e = el === app.items ? app.items : el.childs
      if(e) e.forEach(function(i) {
        if(i == item)  
          e.splice(e.indexOf(i), 1)
        app.findItem(item, i)
      })
    },
    removingData: function(index){
      this.findItem(index, this.items)
    }
  }
})
<head>
<meta name="viewport" content="width=device-width, initial-scale">
<title>Graph</title>
</head>
<body>
    <div id="app">
    <ul>
      <li v-for="(item,index) in items">
        {{item.root}} - 
        <button v-on:click="addingData(item.id)"> + </button>
        <button v-on:click="removingData(item)"> - </button> 

        <ul>
          <li v-for="(child, child_index) in item.childs">
            {{child.root}} - <button v-on:click="addingData(child_index)"> + </button>
            <button v-on:click="removingData(child)"> - </button> 
            <ul>
                <li v-for="(childLevel2, childLevel2_index) in child.childs">
                  {{childLevel2.root}} - 
                  <button v-on:click="addingData(child_index)"> + </button>
                  <button v-on:click="removingData(childLevel2)"> - </button> 
                </li>
              </ul>
          </li>
        </ul>
      </li>
    </ul>
  </div>

    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
    <script src="script.js"></script>
</body>
</html>

http://plnkr.co/edit/hDFpQjh2T0MM2mp16w4e?p=preview

add도 마찬가지입니다.데이터의 트리 구조를 따릅니다.childs올바른 인덱스를 얻고 거기에 추가합니다.

언급URL : https://stackoverflow.com/questions/54709177/how-to-add-and-delete-the-data-in-nested-array-items-using-function-removingda

반응형