为了账号安全,请及时绑定邮箱和手机立即绑定

删除复杂对象中的元素

删除复杂对象中的元素

慕森王 2023-07-06 11:09:28
我有一个像这样的复杂对象:在 Sentences 对象的每个属性中,我们有一个名为 extensions 的数组,我想删除其中的对象...// Sentences defined for the whole courseconst Sentences = {    /******** ---Sentence Start--- ********/    1: {        type: 'sentence-chunk',        duration: { start: 32.281, end: 34.608 },        difficulty: 2,        clipSentence: {            threshold: 40,            reference: "Your Majesty,* they're* ready.",            expect: "expects_sentences"        },        extensions: [            {                threshold: 41,                reference: "reference_sentence",                expect: "expects_sentences"            },            {                threshold: 42,                reference: "reference_sentence",                expect: "expects_sentences"            },            {                threshold: 43,                reference: "reference_sentence",                expect: "expects_sentences"            },        ],    },     /******** ---Sentence End--- ********/    /******** ---Sentence Start--- ********/    2: {        type: 'sentence-chunk',        duration: { start: 32.281, end: 34.608 },        difficulty: 2,        clipSentence: {            threshold: 40,            reference: "Your Majesty,* they're* ready.",            expect: "expects_sentences"        },        extensions: [            {                threshold: 41,                reference: "Your Highness,* they're* ready.",                expect: "expects_sentences"            },            {                threshold: 42,                reference: "Your Majesty,* the guests are* ready.",                expect: "expects_sentences"            },            {                threshold: 43,                reference: "Your Majesty,* they're* ready.",                expect: "expects_sentences"            },        ],    },     /******** ---Sentence End--- ********/}如果引用属性等于reference_sentence,我想删除扩展数组内的对象。但我编写的代码无法正常工作,并且其中一个对象保持不变!我怎样才能解决这个问题?
查看完整描述

3 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

当您进行拼接时 - 您从数组中删除对象,这意味着您更改了它的长度以及剩余元素的索引。


所以你应该做的是,当你拼接时,你只需通过简单地递减你的值来“返回一次迭代” i:


// Sentences defined for the whole course

const Sentences = {


    /******** ---Sentence Start--- ********/

    1: {


        type: 'sentence-chunk',

        duration: { start: 32.281, end: 34.608 },

        difficulty: 2,


        clipSentence: {


            threshold: 40,

            reference: "Your Majesty,* they're* ready.",

            expect: "expects_sentences"


        },


        extensions: [


            {

                threshold: 41,

                reference: "reference_sentence",

                expect: "expects_sentences"

            },


            {

                threshold: 42,

                reference: "reference_sentence",

                expect: "expects_sentences"

            },


            {

                threshold: 43,

                reference: "reference_sentence",

                expect: "expects_sentences"

            },

        ],

    }, 

    /******** ---Sentence End--- ********/


    /******** ---Sentence Start--- ********/

    2: {


        type: 'sentence-chunk',

        duration: { start: 32.281, end: 34.608 },

        difficulty: 2,


        clipSentence: {


            threshold: 40,

            reference: "Your Majesty,* they're* ready.",

            expect: "expects_sentences"


        },


        extensions: [


            {

                threshold: 41,

                reference: "Your Highness,* they're* ready.",

                expect: "expects_sentences"

            },


            {

                threshold: 42,

                reference: "Your Majesty,* the guests are* ready.",

                expect: "expects_sentences"

            },


            {

                threshold: 43,

                reference: "Your Majesty,* they're* ready.",

                expect: "expects_sentences"

            },

        ],

    }, 

    /******** ---Sentence End--- ********/


}


modifySentences();

  console.log(Sentences);


  function modifySentences() {

    for (const [key, sentence] of Object.entries(Sentences)) {

        for(let i = 0; i < sentence.extensions.length; i++) {

           if(sentence.extensions[i].reference === 'reference_sentence') {

            console.log(i)

            sentence.extensions.splice(i, 1);

            --i; //here it is, you resetting index back, so you could check next object

          }

        }

    }

  }


查看完整回答
反对 回复 2023-07-06
?
ITMISS

TA贡献1871条经验 获得超8个赞

简单的数组映射和过滤方法就可以完成您的工作。


const Sentences = {

  1: {

    type: 'sentence-chunk',

    duration: { start: 32.281, end: 34.608 },

    difficulty: 2,


    clipSentence: {

      threshold: 40,

      reference: "Your Majesty,* they're* ready.",

      expect: 'expects_sentences',

    },


    extensions: [

      {

        threshold: 41,

        reference: 'reference_sentence',

        expect: 'expects_sentences',

      },


      {

        threshold: 42,

        reference: 'reference_sentence',

        expect: 'expects_sentences',

      },


      {

        threshold: 43,

        reference: 'reference_sentence',

        expect: 'expects_sentences',

      },

    ],

  },

  2: {

    type: 'sentence-chunk',

    duration: { start: 32.281, end: 34.608 },

    difficulty: 2,


    clipSentence: {

      threshold: 40,

      reference: "Your Majesty,* they're* ready.",

      expect: 'expects_sentences',

    },


    extensions: [

      {

        threshold: 41,

        reference: "Your Highness,* they're* ready.",

        expect: 'expects_sentences',

      },


      {

        threshold: 42,

        reference: 'Your Majesty,* the guests are* ready.',

        expect: 'expects_sentences',

      },


      {

        threshold: 43,

        reference: "Your Majesty,* they're* ready.",

        expect: 'expects_sentences',

      },

    ],

  },

};


const ret = Object.entries(Sentences).map(([, sentence]) => {

  sentence.extensions = sentence.extensions.filter(

    (x) => x.reference !== 'reference_sentence'

  );

  return sentence;

});

console.log(ret);


查看完整回答
反对 回复 2023-07-06
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

你可以尝试


function modifySentences() {

    for (const key of Object.keys(Sentences)) {

      if (Sentences.hasOwnProperty(key)) {

         Sentences[key].extensions = Sentences[key].extensions.filter(ext => ext.reference !== "reference_sentence")

      }

    }

}

需要 hasOwnProperty() 检查,以便仅迭代您定义的那些属性。

查看完整回答
反对 回复 2023-07-06
  • 3 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信