整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          第33屆金雞獎報名標準詳細 2020金雞獎表演類單項

          第33屆金雞獎報名標準詳細 2020金雞獎表演類單項獎參評要求

          三十三屆中國電影金雞獎公布評選標準。其中,參評編劇獎需注明是原創或改編。參評表演類單項獎(最佳男主角、最佳女主角、最佳男配角、最佳女配角)者,所飾角色的臺詞須由演員本人配音。報名日期為即日起至2020年8月15日。

          全文如下:

          各電影制片機構:

          根據《中國電影金雞獎評獎章程》和《中國電影金雞獎評選細則》有關規定,現就報送參評第三十三屆中國電影金雞獎有關事項通知如下:

          一、獎項設置

          本屆金雞獎作品獎設最佳故事片、最佳中小成本故事片、最佳兒童片、最佳紀錄/科教片、最佳戲曲片、最佳美術片、最佳外語片。

          本屆金雞獎單項獎設最佳編劇、最佳導演、最佳男主角、最佳女主角、最佳男配角、最佳女配角、最佳攝影、最佳美術、最佳音樂、最佳錄音、最佳剪輯、最佳導演處女作獎。

          二、報名范圍

          (一)2019年7月1日至2020年6月30日取得國家電影局核發的電影片公映許可證的故事片、兒童片、科教片、紀錄片、戲曲片、美術片,符合下列條件之一者可報送參評本屆金雞獎作品獎:

          1.內地(大陸)電影制片機構拍攝的影片;

          2.內地(大陸)電影制片機構與港澳臺電影制片機構合作拍攝的影片;

          3.內地(大陸)電影制片機構與外國電影制片機構合作拍攝的影片;

          4.經國家電影局審查通過在內地(大陸)發行的港澳臺影片(不含港澳臺電影制片機構與外國電影制片機構合作拍攝的影片)。

          (二)上述條款所述影片中申報單項獎者,須具有中華人民共和國國籍。

          三、報名程序

          中國電影金雞獎的評獎為每年評選一次,報名日期為即日起至2020年8月15日。

          各制片單位報名參評可直接將所需報送材料快遞至中國電影家協會金雞獎辦公室,有關參評表格請在中國文藝網(https://www.cflac.org.cn/zgwl/wlgg/202007/t20200725_488304.html)下載。

          材料寄送地址:北京市朝陽區北三環東路22號中國電影家協會310室

          收件人:中國影協金雞獎辦公室

          郵 編:100013

          電 話:010-64296094

          四、報名材料

          報送材料包括以下內容:

          (一)紙質資料:

          1.25套紙質報名資料

          (1)國家電影局頒發的《電影片公映許可證》復印件;

          (2)參評人(單位)承諾書;

          (3)中國電影金雞獎參評影片申報表、參評單項申報表。

          報名紙質材料(A4規格)以影片為單位(包括《電影片公映許可證》復印件、參評人(單位)承諾書、影片申報表、單項申報表及需詳細推薦的材料)裝訂成冊。第一張為《電影片公映許可證》復印件,第二張為參評人(單位)承諾書,第三張為影片報名表,后面為各單項報名表,裝訂為一套。其中一套為原件,需逐項加蓋申報單位紅色公章,其余24套為該套的復印件。

          2.申報參評最佳編劇獎者,需提供電影文學劇本一式兩份(無水?。?。

          (二)電子版資料:

          1.中國電影金雞獎參評影片申報表和參評單項申報表(doc或docx格式);

          2.高清圖片:包括影片海報1張以上、劇照3-5張、參評單項者的照片(個人劇照、工作照、藝術照均可)1-2張;

          3.簡要故事梗概(300字以內,doc或docx格式);

          4.申報參評最佳編劇獎者,需提供電影文學劇本(doc或docx格式,無水?。?/p>

          上述所有電子版資料請刻在光盤上,報名時光盤隨紙質資料和其它資料一并寄給金雞獎辦公室。

          (三)其他資料:

          1.影片2K開口無密鑰數字硬盤(要求有龍標無水?。?;

          2.影片DVD光盤(全片,要求有龍標無水印);

          3.影片高清片花:含片名、單項獎報名者鏡頭(不超過5分鐘,mp4格式),可含拍攝花絮(不超過3分鐘,mp4格式)。請將片花存儲在移動硬盤中,與其它報名資料一起寄給金雞獎辦公室,使用完畢后將予以歸還。

          五、注意事項

          (一)請各申報機構和審核單位本著實事求是的精神,嚴格篩選、擇優申報。

          (二)參評作品獎的影片,須認真填寫影片參評申報表中所列各項,出品單位名稱及其排序、數量應與公映許可證一致,如有不一致的特殊情況,如公司改名或某家出品方不參評等情況,需要出具加蓋公章的說明。創作人員名稱及其排序應與影片字幕一致,如有特殊情況,需出具加蓋公章的說明。

          (三)如報名單項獎的一個獎項有多人,需每人填寫一張報名表,并注明順序。

          (四)參評編劇獎需注明是原創或改編。

          (五)參評表演類單項獎(最佳男主角、最佳女主角、最佳男配角、最佳女配角)者,所飾角色的臺詞須由演員本人配音。

          (六)參評最佳中小成本故事片(候選作品要求投資為低于1000萬人民幣的故事片),必須標明影片制作成本。

          (七)最佳導演與最佳導演處女作獎只能選擇一個進行申報。最佳導演處女作獎要求是該導演獨立執導的第一部影片。

          (八)最佳故事片、最佳中小成本故事片與最佳兒童片只能選擇一項進行申報。

          (九)紀錄片、科教片、戲曲片、美術片不可申報單項獎。

          (十)單項獎參評人須為中國國籍,如該獎項署名有外籍合作者,此單項不可報名。

          特此通知。

          來源:網易娛樂

          京報訊 7月25日,中國文藝網官網發布了《關于參評第三十三屆中國電影金雞獎的通知》。其中,參評編劇獎需注明是原創或改編,參評表演類單項獎(最佳男主角、最佳女主角、最佳男配角、最佳女配角)者,所飾角色的臺詞須由演員本人配音,報名日期為即日起至8月15日。

          全文如下:

          各電影制片機構:

          根據《中國電影金雞獎評獎章程》和《中國電影金雞獎評選細則》有關規定,現就報送參評第三十三屆中國電影金雞獎有關事項通知如下:

          一、獎項設置

          本屆金雞獎作品獎設最佳故事片、最佳中小成本故事片、最佳兒童片、最佳紀錄/科教片、最佳戲曲片、最佳美術片、最佳外語片。

          本屆金雞獎單項獎設最佳編劇、最佳導演、最佳男主角、最佳女主角、最佳男配角、最佳女配角、最佳攝影、最佳美術、最佳音樂、最佳錄音、最佳剪輯、最佳導演處女作獎。

          二、報名范圍

          (一)2019年7月1日至2020年6月30日取得國家電影局核發的電影片公映許可證的故事片、兒童片、科教片、紀錄片、戲曲片、美術片,符合下列條件之一者可報送參評本屆金雞獎作品獎:

          1.內地(大陸)電影制片機構拍攝的影片;

          2.內地(大陸)電影制片機構與港澳臺電影制片機構合作拍攝的影片;

          3.內地(大陸)電影制片機構與外國電影制片機構合作拍攝的影片;

          4.經國家電影局審查通過在內地(大陸)發行的港澳臺影片(不含港澳臺電影制片機構與外國電影制片機構合作拍攝的影片)。

          (二)上述條款所述影片中申報單項獎者,須具有中華人民共和國國籍。

          三、報名程序

          中國電影金雞獎的評獎為每年評選一次,報名日期為即日起至2020年8月15日。

          各制片單位報名參評可直接將所需報送材料快遞至中國電影家協會金雞獎辦公室,有關參評表格請在中國文藝網(https://www.cflac.org.cn/zgwl/wlgg/202007/t20200725_488304.html)下載。

          材料寄送地址:北京市朝陽區北三環東路22號中國電影家協會310室

          收件人:中國影協金雞獎辦公室

          郵 編:100013

          電 話:010-64296094

          四、報名材料

          報送材料包括以下內容:

          (一)紙質資料:

          1.25套紙質報名資料

          (1)國家電影局頒發的《電影片公映許可證》復印件;

          (2)參評人(單位)承諾書;

          (3)中國電影金雞獎參評影片申報表、參評單項申報表。

          報名紙質材料(A4規格)以影片為單位(包括《電影片公映許可證》復印件、參評人(單位)承諾書、影片申報表、單項申報表及需詳細推薦的材料)裝訂成冊。第一張為《電影片公映許可證》復印件,第二張為參評人(單位)承諾書,第三張為影片報名表,后面為各單項報名表,裝訂為一套。其中一套為原件,需逐項加蓋申報單位紅色公章,其余24套為該套的復印件。

          2.申報參評最佳編劇獎者,需提供電影文學劇本一式兩份(無水印)。

          (二)電子版資料:

          1.中國電影金雞獎參評影片申報表和參評單項申報表(doc或docx格式);

          2.高清圖片:包括影片海報1張以上、劇照3-5張、參評單項者的照片(個人劇照、工作照、藝術照均可)1-2張;

          3.簡要故事梗概(300字以內,doc或docx格式);

          4.申報參評最佳編劇獎者,需提供電影文學劇本(doc或docx格式,無水?。?。

          上述所有電子版資料請刻在光盤上,報名時光盤隨紙質資料和其它資料一并寄給金雞獎辦公室。

          (三)其他資料:

          1.影片2K開口無密鑰數字硬盤(要求有龍標無水?。?/p>

          2.影片DVD光盤(全片,要求有龍標無水?。?;

          3.影片高清片花:含片名、單項獎報名者鏡頭(不超過5分鐘,mp4格式),可含拍攝花絮(不超過3分鐘,mp4格式)。請將片花存儲在移動硬盤中,與其它報名資料一起寄給金雞獎辦公室,使用完畢后將予以歸還。

          五、注意事項

          (一)請各申報機構和審核單位本著實事求是的精神,嚴格篩選、擇優申報。

          (二)參評作品獎的影片,須認真填寫影片參評申報表中所列各項,出品單位名稱及其排序、數量應與公映許可證一致,如有不一致的特殊情況,如公司改名或某家出品方不參評等情況,需要出具加蓋公章的說明。創作人員名稱及其排序應與影片字幕一致,如有特殊情況,需出具加蓋公章的說明。

          (三)如報名單項獎的一個獎項有多人,需每人填寫一張報名表,并注明順序。

          (四)參評編劇獎需注明是原創或改編。

          (五)參評表演類單項獎(最佳男主角、最佳女主角、最佳男配角、最佳女配角)者,所飾角色的臺詞須由演員本人配音。

          (六)參評最佳中小成本故事片(候選作品要求投資為低于1000萬人民幣的故事片),必須標明影片制作成本。

          (七)最佳導演與最佳導演處女作獎只能選擇一個進行申報。最佳導演處女作獎要求是該導演獨立執導的第一部影片。

          (八)最佳故事片、最佳中小成本故事片與最佳兒童片只能選擇一項進行申報。

          (九)紀錄片、科教片、戲曲片、美術片不可申報單項獎。

          (十)單項獎參評人須為中國國籍,如該獎項署名有外籍合作者,此單項不可報名。

          特此通知。

          新京報編輯 徐美琳

          校對 吳興發

          來源:新京報


          信大家看到這張圖片就知道我們這篇文章要講什么了,沒錯就是-商品多規格選擇的解法。

          近來在掘金上面看見大家都在研究“商品多規格選擇”的問題,例如晨曦大佬的前端電商 sku 的全排列算法很難嗎?學會這個套路,徹底掌握排列組合。 在這篇文章里面,大佬寫明了如何實現sku的全排列,思路非常的棒,但是并沒有緊貼業務場景。真正的業務場景是,我們要根據用戶每一次選擇的規格,找出剩下可選的規格和不可選的規格,表現在前端頁面上:就是將不可選的規格置回,也就是如下效果(可以點擊這里查看最終效果):

          那么今天我們就來講講這個問題的一個解決方法,要講明白很難,但是我相信你看了這篇文章之后,sku就再也難不倒你了。

          什么是 sku

          在介紹具體解法之前,我們先來介紹一下什么是sku? sku是會計學中的一個名詞,被稱作庫存單元。說人話?簡單來講就是,我們上圖 中每一個單規格選項,例如深空灰色、64G,都是一個規格(sku)。商品和sku屬于一對多的關系,也就是我們可以選擇多個sku來確定到某個具體的商品:

          業務場景

          可以這么說,只要是做電商類相關的產品,比如購物 APP、購物網站等等,都會遇到這么一個場景,每個商品對應著多個規格,用戶可以根據不同的規格組合,選擇出自己想要的產品。我們自己在生活中也會經常用到這個功能,然而就是這樣一個簡單的功能,卻難倒了很多小伙伴。

          筆者也是一樣,剛開始遇到這個場景,筆者覺得應該一個下午就能搞定,完美收工,奈何還是太過于年輕,搞了差不多兩天,在網上查閱了很多相關的文章和資料,但是不得其解,最后沒有辦法,只能硬著頭皮采用暴力求解(也就是不斷循環)的方法來解決的,時間復雜度賊高,達到了O(m*n)也就是O(n2),這種實現方法其實也不是不行(能跑就行),對吧。但是后來筆者發現,當一個商品的規格非常非常多、并且用戶的設備性能不是那么好的情況下,那么這種實現方式就會導致運行時間過長,表現在頁面上就是:當用戶點擊了一個規格,會有明顯的卡頓,那怎么行,客戶都流失了,老板還怎么買法拉利 ??所以筆者又開始了研究。

          一個偶然的機會,筆者在逛知乎的時候,看到了有人在討論圖,這個數據結構,突然靈光一現,貌似咱們的多規格選擇也可以用圖來作求解方法,后來一嘗試,還真的可行。而且時間復雜度只有O(n),簡直完美。所以我們下面來介紹一下圖,什么是圖?相信大學學過數據結構與算法的同學都應該知道,不過應該已經忘得一干二凈了。

          什么是圖

          圖其實是數學的一個分支。它以圖為研究對象。圖論中的圖是由若干給定的點及連接兩點的線所構成的圖形,這種圖形通常用來描述某些事物之間的某種特定關系,用點代表事物,用連接兩點的線表示相應兩個事物間具有這種關系:

          圖通常有如下分類:

          • 分為有向圖和無向圖
          • 分為有權圖和無權圖

          好了知道這兩個概念就差不多了,當然如果想了解更多更多概念,請看這里

          那么我們需要用到的是無向圖,什么是無向圖呢,就像這樣:

          兩個頂點之間如果有連線,則表示這兩個頂點是互通的。小伙伴們看到這里可能會懵逼了,說了這么多,好像跟我們要解決的問題沒關系啊。小伙伴們現在想一想:用戶在選擇規格的時候,肯定是沒有先后順序的,假設我們現在把每種規格看作是無向圖的一個頂點的話,我們可以根據這些單項規格的組合規格,就可以畫出一個像上圖一樣的無向圖。

          鄰接矩陣

          假設我們已經畫出了如上 的無向圖,那么我們如何將這個圖用咱們的代碼來表示呢?這里就用到了鄰接矩陣

          鄰接矩陣其實是《線性代數》里面的概念,相信很多小伙伴都不會陌生,我們在代碼中,表示它的方法是用一個n x n的二維數組來抽象鄰接矩陣。讓我們來把上面 這個無向圖用鄰接矩陣(二維數組)表示出來:

          很顯然,如果兩個頂點互通(有連線),那么它們對應下標的值則為 1,否則為 0。

          好了,下面開始逐步都是高能,請小伙伴們認真觀看。

          假設現在我們有如下規格列表:

          specList: [
            { title: "顏色", list: ["紅色", "紫色"] },
            { title: "套餐", list: ["套餐一", "套餐二"] },
            { title: "內存", list: ["64G", "128G", "256G"] },
          ];

          可供選擇的規格組合有:

          specCombinationList: [
              { id: "1", specs: ["紫色", "套餐一", "64G"] },
              { id: "2", specs: ["紫色", "套餐一", "128G"] },
              { id: "3", specs: ["紫色", "套餐二", "128G"] },
              { id: "4", specs: ["紅色", "套餐二", "256G"] }
            ],

          首先,我們根據specList知道:我們有“顏色”、“套餐”、“內存”三種規格類別。分別有紅色、紫色、套餐一、套餐二、64G、128G、256G這些單項規格。每個單項規格作為一個頂點,所以就有如下頂點:

          然后我們根據specCombinationList,我們可以知道,哪些規格的組合是可選的。好了我們要開始畫圖了。

          根據{ id: "1", specs: ["紫色", "套餐一", "64G"] },我們可以畫出:

          接下來依葫蘆畫瓢:我們可以根據specCombinationList剩下的數據畫出如下的圖:

          好了,我們已經根據specCombinationList(也就是可選規格組合)將我們的規格無向圖畫完了。現在我們來模擬一下用戶的選擇:

          specCombinationList: [
              { id: "1", specs: ["紫色", "套餐一", "64G"] },
              { id: "2", specs: ["紫色", "套餐一", "128G"] },
              { id: "3", specs: ["紫色", "套餐二", "128G"] },
              { id: "4", specs: ["紅色", "套餐二", "256G"] }
            ],

          假設用戶先選擇了紫色、根據specCombinationList,我們發現套餐一、套餐二、64G、128G是可選的,這個時候我們發現一個問題:顯然跟紫色同級的紅色其實也是可選的。所以這個圖其實我們還沒有畫完。所以相同類型的規格其實是應該連接起來的:

          好了,無向圖畫好了,現在我們將它映射到鄰接矩陣上面(這一步強烈建議小伙伴們拿出紙筆來一起畫一畫):

          到了這一步,恭喜你,你已經懂了一大半了 。

          好了,到這我們就可以公布最終結論了:

          • 當用戶初次進入該頁面時,所有的規格均可選:
          • 當用戶選擇了某個頂點后,當前頂點所有可選項均被找出(即是當前頂點所在列值為 1 的頂點):
          • 選取多個頂點時,可選項是各個頂點鄰接點的交集:(即是選中頂點所在列的交集)

          代碼實現

          說真的,我覺得小伙伴們看明白了我上面 這些講解,相信你已經完全懂了該如何實現“多規格選擇”算法了。不過有句話叫做:光說不練假把式!那下面我們就一起來捋一捋,用代碼如何實現吧,筆者這里用的前端框架是react,明白思路了,用什么框架都一樣的哦。

          這里先說下思路:

          1、根據規格列表(specList)創建鄰接矩陣(數組)

          2、根據可選規格組合(specCombinationList)填寫頂點的值

          3、獲得所有可選頂點,然后根據可選頂點填寫同級頂點的值

          創建鄰接矩陣

          首先,我們需要提供一個類來創建鄰接矩陣。一個鄰接矩陣,首先需要傳入一個頂點數組:vertex,需要一個用來裝鄰接矩陣的數組:adjoinArray。剛剛我們上面說到了,這個類還必須提供計算并集和交集的方法:

          export type AdjoinType=Array<string>;
          
          export default class AdjoinMatrix {
            vertex: AdjoinType; // 頂點數組
            quantity: number; // 矩陣長度
            adjoinArray: Array<number>; // 矩陣數組
          
            constructor(vertx: AdjoinType) {
              this.vertex=vertx;
              this.quantity=this.vertex.length;
              this.adjoinArray=[];
              this.init();
            }
            // 初始化數組
            init() {
              this.adjoinArray=Array(this.quantity * this.quantity).fill(0);
            }
          
            /*
             * @param id string
             * @param sides Array<string>
             *  傳入一個頂點,和當前頂點可達的頂點數組,將對應位置置為1
             */
            setAdjoinVertexs(id: string, sides: AdjoinType) {
              const pIndex=this.vertex.indexOf(id);
              sides.forEach((item)=> {
                const index=this.vertex.indexOf(item);
                this.adjoinArray[pIndex * this.quantity + index]=1;
              });
            }
          
            /*
             * @param id string
             * 傳入頂點的值,獲取該頂點的列
             */
            getVertexCol(id: string) {
              const index=this.vertex.indexOf(id);
              const col: Array<number>=[];
              this.vertex.forEach((item, pIndex)=> {
                col.push(this.adjoinArray[index + this.quantity * pIndex]);
              });
              return col;
            }
          
            /*
             * @param params Array<string>
             * 傳入一個頂點數組,求出該數組所有頂點的列的合
             */
            getColSum(params: AdjoinType) {
              const paramsVertex=params.map((id)=> this.getVertexCol(id));
              const paramsVertexSum: Array<number>=[];
              this.vertex.forEach((item, index)=> {
                const rowtotal=paramsVertex
                  .map((value)=> value[index])
                  .reduce((total, current)=> {
                    total +=current || 0;
                    return total;
                  }, 0);
                paramsVertexSum.push(rowtotal);
              });
              return paramsVertexSum;
            }
          
            /*
             *  @param params Array<string>
             * 傳入一個頂點數組,求出并集
             */
            getCollection(params: AdjoinType) {
              const paramsColSum=this.getColSum(params);
              let collections: AdjoinType=[];
              paramsColSum.forEach((item, index)=> {
                if (item && this.vertex[index]) collections.push(this.vertex[index]);
              });
              return collections;
            }
          
            /*
             *  @param params Array<string>
             * 傳入一個頂點數組,求出交集
             */
            getUnions(params: AdjoinType) {
              const paramsColSum=this.getColSum(params);
              let unions: AdjoinType=[];
              paramsColSum.forEach((item, index)=> {
                if (item >=params.length && this.vertex[index]) unions.push(this.vertex[index]);
              });
              return unions;
            }
          }

          有了這個類,接下來可以創建一個專門用于生成商品多規格選擇的類,它繼承于AdjoinMatrix。

          創建多規格選擇鄰接矩陣

          我們這個多規格選擇的鄰接矩陣,需要提供一個查詢可選頂點的方法:getSpecscOptions

          import AdjoinMatrix from "./adjoin-martix";
          import { AdjoinType } from "./adjoin-martix";
          import { SpecCategoryType, CommoditySpecsType } from "../redux/reducer/spec-reducer";
          
          export default class SpecAdjoinMatrix extends AdjoinMatrix {
            specList: Array<CommoditySpecsType>;
            specCombinationList: Array<SpecCategoryType>;
          
            constructor(specList: Array<CommoditySpecsType>, specCombinationList: Array<SpecCategoryType>) {
              super(specList.reduce((total: AdjoinType, current)=> [...total, ...current.list], []));
              this.specList=specList;
              this.specCombinationList=specCombinationList;
              // 根據可選規格列表矩陣創建
              this.initSpec();
              // 同級頂點創建
              this.initSameLevel();
            }
          
            /**
             * 根據可選規格組合填寫鄰接矩陣的值
             */
            initSpec() {
              this.specCombinationList.forEach((item)=> {
                this.fillInSpec(item.specs);
              });
            }
            // 填寫同級點
            initSameLevel() {
              // 獲得初始所有可選項
              const specsOption=this.getCollection(this.vertex);
              this.specList.forEach((item)=> {
                const params: AdjoinType=[];
                // 獲取同級別頂點
                item.list.forEach((value)=> {
                  if (specsOption.includes(value)) params.push(value);
                });
                // 同級點位創建
                this.fillInSpec(params);
              });
            }
            /*
             * 傳入頂點數組,查詢出可選規格
             * @param params
             */
            getSpecscOptions(params: AdjoinType) {
              let specOptionCanchoose: AdjoinType=[];
              if (params.some(Boolean)) {
                // 過濾一下選項
                specOptionCanchoose=this.getUnions(params.filter(Boolean));
              } else {
                // 所有可選項
                specOptionCanchoose=this.getCollection(this.vertex);
              }
              return specOptionCanchoose;
            }
          
            /*
             * @params
             * 填寫鄰接矩陣的值
             */
            fillInSpec(params: AdjoinType) {
              params.forEach((param)=> {
                this.setAdjoinVertexs(param, params);
              });
            }

          頁面渲染

          好了到了這一步,我們已經可以在頁面中使用這兩個類了:

          import React, { useState, useMemo } from "react";
          import { useSelector } from "react-redux";
          import { RootState } from "../redux/reducer/root-reducer";
          import SpecAdjoinMatrix from "../utils/spec-adjoin-martix";
          import "./spec.css";
          const classNames=require("classnames");
          
          const Spec: React.FC=()=> {
            const { specList, specCombinationList }=useSelector((state: RootState)=> state.spec);
            // 已選擇的規格,長度為規格列表的長度
            const [specsS, setSpecsS]=useState(Array(specList.length).fill(""));
          
            // 創建一個規格矩陣
            const specAdjoinMatrix=useMemo(()=> new SpecAdjoinMatrix(specList, specCombinationList), [specList, specCombinationList]);
            // 獲得可選項表
            const optionSpecs=specAdjoinMatrix.getSpecscOptions(specsS);
          
            const handleClick=function(bool: boolean, text: string, index: number) {
              // 排除可選規格里面沒有的規格
              if (specsS[index] !==text && !bool) return;
              // 根據text判斷是否已經被選中了
              specsS[index]=specsS[index]===text ? "" : text;
              setSpecsS(specsS.slice());
            };
          
            return (
              <div className="container">
                {specList.map(({ title, list }, index)=> (
                  <div key={index}>
                    <p className="title">{title}</p>
                    <div className="specBox">
                      {list.map((value, i)=> {
                        const isOption=optionSpecs.includes(value); // 當前規格是否可選
                        const isActive=specsS.includes(value); // 當前規格是否被選
                        return (
                          <span
                            key={i}
                            className={classNames({
                              specOption: isOption,
                              specAction: isActive,
                              specDisabled: !isOption,
                            })}
                            onClick={()=> handleClick(isOption, value, index)}
                          >
                            {value}
                          </span>
                        );
                      })}
                    </div>
                  </div>
                ))}
              </div>
            );
          };
          
          export default Spec;

          好了,打完收工了,如果有小伙伴想看實現效果,可以查看這里,如果有小伙伴想把代碼拉到本地看看,那么請點擊這里

          總結

          實踐證明:大學學的東西是真的有用的。我們通過圖,解決了商品多規格選擇的難題。在求解可選規格的時候,時間復雜度由原來的O(n2)變成了O(n)。不過值得一提的是,采用鄰接矩陣來存儲圖,空間復雜度就變成了O(n2)了,同時也存在浪費空間的問題,但是圖肯定不止有鄰接矩陣這一種存儲方法,我們還可以用鏈表來存儲圖,小伙伴們可以自己去試一試。另外如果用鏈表來存儲圖,空間復雜度會變低,但是時間復雜度會變高,具體如何選擇,就看小伙伴們自己權衡了。

          以后遇到這個需求,小伙伴們肯定是分分鐘實現,提早下班。

          我是覺非,碼字不易,如果你覺得這篇文章對你有用的話,請給個贊吧?。?/p>


          作者:覺非
          鏈接:https://juejin.im/post/5eef2fcee51d4574113a0203
          來源:掘金
          著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


          主站蜘蛛池模板: 后入内射国产一区二区| 精品无码日韩一区二区三区不卡 | 国产成人精品无码一区二区三区 | 一级毛片完整版免费播放一区| 亚洲国产一区二区a毛片| 亚洲欧洲一区二区三区| 亚洲视频在线一区二区三区| 日本大香伊一区二区三区| 人妻无码一区二区视频| 精品国产日韩亚洲一区在线 | aⅴ一区二区三区无卡无码| 日本精品一区二区三区视频| 国产成人精品一区二三区熟女| 3D动漫精品一区二区三区| 91秒拍国产福利一区| 2021国产精品视频一区| 伊人色综合视频一区二区三区| 亚洲一区二区三区丝袜| 91精品乱码一区二区三区| 3D动漫精品一区二区三区| 国产精品无码一区二区在线观| 中文字幕av一区| 毛片一区二区三区无码| 秋霞电影网一区二区三区| 精品视频在线观看你懂的一区| 日本精品高清一区二区| 中文字幕一区二区三匹| 国模吧一区二区三区精品视频| 国产成人无码aa精品一区| 无码人妻久久一区二区三区蜜桃| 亚洲国产综合精品一区在线播放| 国产精品无码一区二区在线观一| 国产成人一区二区精品非洲 | 国产一区风间由美在线观看| 一区二区高清在线| 亚洲AV无码一区东京热| 日韩一区二区三区不卡视频 | 一区二区在线电影| 久久精品国产一区二区三区| 波多野结衣AV一区二区三区中文| 精品一区二区三区中文字幕|